|
40573
|
855
|
0
|
2026-04-16T16:29:26.217584+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-16/1776 /Users/lukas/.screenpipe/data/data/2026-04-16/1776356966217_m2.jpg...
|
iTerm2
|
nano
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
idx_elements_source_role_text|elements|CREATE INDE idx_elements_source_role_text|elements|CREATE INDEX idx_elements_source_role_text
ON elements(source, role, frame_id)
WHERE text IS NOT NULL
idx_elements_frame_source_role|elements|CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL
idx_frames_timestamp|frames|CREATE INDEX idx_frames_timestamp ON frames(timestamp)
idx_frames_video_chunk_id|frames|CREATE INDEX idx_frames_video_chunk_id ON frames(video_chunk_id)
idx_frames_timestamp_device|frames|CREATE INDEX idx_frames_timestamp_device
ON frames(timestamp, device_name)
idx_frames_snapshot_path|frames|CREATE INDEX idx_frames_snapshot_path
ON frames(snapshot_path) WHERE snapshot_path IS NOT NULL
idx_frames_cloud_blob_id|frames|CREATE INDEX idx_frames_cloud_blob_id
ON frames(cloud_blob_id) WHERE cloud_blob_id IS NULL AND snapshot_path IS NOT NULL
idx_frames_sync_id|frames|CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL
idx_frames_elements_ref_frame_id|frames|CREATE INDEX idx_frames_elements_ref_frame_id
ON frames(elements_ref_frame_id)
WHERE elements_ref_frame_id IS NOT NULL
idx_meetings_start|meetings|CREATE INDEX idx_meetings_start ON meetings(meeting_start)
idx_meetings_end|meetings|CREATE INDEX idx_meetings_end ON meetings(meeting_end)
idx_memories_created_at|memories|CREATE INDEX idx_memories_created_at ON memories(created_at)
idx_memories_importance|memories|CREATE INDEX idx_memories_importance ON memories(importance DESC)
idx_memories_source|memories|CREATE INDEX idx_memories_source ON memories(source)
idx_memories_frame_id|memories|CREATE INDEX idx_memories_frame_id ON memories(frame_id)
idx_ocr_text_frame_id|ocr_text|CREATE INDEX idx_ocr_text_frame_id ON ocr_text(frame_id)
idx_ocr_text_frame_app_window|ocr_text|CREATE INDEX idx_ocr_text_frame_app_window ON ocr_text(frame_id, app_name, window_name)
idx_ocr_text_length|ocr_text|CREATE INDEX idx_ocr_text_length ON ocr_text (text_length)
idx_ocr_text_sync_id|ocr_text|CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL
idx_pipe_exec_name_status|pipe_executions|CREATE INDEX idx_pipe_exec_name_status ON pipe_executions(pipe_name, status)
idx_pipe_exec_running|pipe_executions|CREATE INDEX idx_pipe_exec_running ON pipe_executions(status) WHERE status = 'running'
idx_pipe_exec_name_time|pipe_executions|CREATE INDEX idx_pipe_exec_name_time ON pipe_executions(pipe_name, id DESC)
idx_ui_events_timestamp|ui_events|CREATE INDEX idx_ui_events_timestamp ON ui_events(timestamp)
idx_ui_events_event_type|ui_events|CREATE INDEX idx_ui_events_event_type ON ui_events(event_type)
idx_ui_events_app_name|ui_events|CREATE INDEX idx_ui_events_app_name ON ui_events(app_name)
idx_ui_events_session_id|ui_events|CREATE INDEX idx_ui_events_session_id ON ui_events(session_id)
idx_ui_events_frame_id|ui_events|CREATE INDEX idx_ui_events_frame_id ON ui_events(frame_id)
idx_ui_events_sync_id|ui_events|CREATE INDEX idx_ui_events_sync_id ON ui_events(sync_id)
idx_ui_events_synced_at|ui_events|CREATE INDEX idx_ui_events_synced_at ON ui_events(synced_at)
idx_ui_events_unsynced|ui_events|CREATE INDEX idx_ui_events_unsynced ON ui_events(synced_at) WHERE synced_at IS NULL
idx_video_chunks_device_name|video_chunks|CREATE INDEX idx_video_chunks_device_name ON video_chunks(device_name)
idx_video_chunks_device_name_id|video_chunks|CREATE INDEX idx_video_chunks_device_name_id ON video_chunks(device_name, id DESC)
idx_video_chunks_cloud_blob_id|video_chunks|CREATE INDEX idx_video_chunks_cloud_blob_id
ON video_chunks(cloud_blob_id) WHERE cloud_blob_id IS NULL
idx_vision_tags_vision_id|vision_tags|CREATE INDEX idx_vision_tags_vision_id ON vision_tags(vision_id)
idx_vision_tags_tag_id|vision_tags|CREATE INDEX idx_vision_tags_tag_id ON vision_tags(tag_id)
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT
'elements_fts' as name, COUNT(*) as rows FROM elements_fts
UNION ALL SELECT 'frames_fts', COUNT(*) FROM frames_fts
UNION ALL SELECT 'ui_events_fts', COUNT(*) FROM ui_events_fts
UNION ALL SELECT 'audio_transcriptions_fts', COUNT(*) FROM audio_transcriptions_fts;"
elements_fts|2595462
frames_fts|40394
ui_events_fts|51394
audio_transcriptions_fts|3
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT name, SUM(payload) as bytes
FROM dbstat
WHERE name IN ('elements_fts_data','frames_fts_data','ui_events_fts_data')
GROUP BY name;"
elements_fts_data|49417125
frames_fts_data|46211048
ui_events_fts_data|1661147
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT name, SUM(payload) as bytes
FROM dbstat
WHERE name IN ('frames', 'ui_events', 'elements', 'elements_fts_data','frames_fts_data','ui_events_fts_data')
GROUP BY name;"
elements|334884969
elements_fts_data|49472096
frames|689381789
frames_fts_data|46270876
ui_events|8354906
ui_events_fts_data|1663427
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT sql FROM sqlite_master WHERE type='table' AND name IN ('elements_fts','frames_fts','ui_events_fts','memories_fts') ORDER BY name;"
CREATE VIRTUAL TABLE elements_fts USING fts5(
text,
role,
frame_id UNINDEXED,
content='elements',
content_rowid='id',
tokenize='unicode61'
)
CREATE VIRTUAL TABLE frames_fts USING fts5(
full_text,
app_name,
window_name,
browser_url,
UW PICO 5.09 New Buffer
[ Read 1 line ]
^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos
^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell
id UNINDEXED,
tokenize='unicode61'
UW PICO 5.09 New Buffer
[ Read 1 line ]
^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos
^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell
)
UW PICO 5.09 New Buffer
[ Read 25 lines ]
^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos
^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell
CREATE VIRTUAL TABLE memories_fts USING fts5(
content,
tags,
content='memories',
content_rowid='id',
tokenize='unicode61'
)
CREATE VIRTUAL TABLE ui_events_fts USING fts5(
text_content,
app_name,
window_title,
element_name,
content='ui_events',
content_rowid='id',
tokenize='unicode61'
)
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ls
config.json db.sqlite-shm screenpipe.2026-04-09.0.log screenpipe.2026-04-13.0.log screenpipe.2026-04-16.0.log
data db.sqlite-wal screenpipe.2026-04-11.0.log screenpipe.2026-04-14.0.log
db.sqlite pipes screenpipe.2026-04-12.0.log screenpipe.2026-04-15.0.log
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ touch screenpipe_sync.sh
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ll
total 5632584
drwxr-xr-x 17 lukas staff 544 16 Apr 19:19 .
UW PICO 5.09 New Buffer
[ Read 25 lines ]
^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos
^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell
UW PICO 5.09 File: screenpipe_sync.sh
# Check NAS mount
if [ ! -d "/Volumes/Test/screenpipe" ]; then
echo "ERROR: NAS not mounted"
else
echo "OK: NAS mounted"
fi
# Check source DB
DB_SRC="$HOME/.screenpipe/db.sqlite"
if [ ! -f "$DB_SRC" ]; then
echo "ERROR: Source DB not found"
else
echo "OK: Source DB exists"
du -sh "$DB_SRC"
fi
# Check NAS DB (may not exist yet on first run - that's fine)
NAS_DB="/Volumes/Test/screenpipe/archive.db"
if [ ! -f "$NAS_DB" ]; then
echo "INFO: archive.db does not exist yet - will be created on first sync"
else
echo "OK: archive.db exists"
du -sh "$NAS_DB"
sqlite3 "$NAS_DB" "SELECT COUNT(*) || ' tables' FROM sqlite_master WHERE type='table';"
fi
^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos
^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
screenpipe"
Close Tab
nano
Close Tab
✳ Review screenpipe usage and Boosteroid integration (node)
Close Tab
⌥⌘1
nano...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"idx_elements_source_role_text|elements|CREATE INDEX idx_elements_source_role_text\n ON elements(source, role, frame_id)\n WHERE text IS NOT NULL\nidx_elements_frame_source_role|elements|CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL\nidx_frames_timestamp|frames|CREATE INDEX idx_frames_timestamp ON frames(timestamp)\nidx_frames_video_chunk_id|frames|CREATE INDEX idx_frames_video_chunk_id ON frames(video_chunk_id)\nidx_frames_timestamp_device|frames|CREATE INDEX idx_frames_timestamp_device\n ON frames(timestamp, device_name)\nidx_frames_snapshot_path|frames|CREATE INDEX idx_frames_snapshot_path\n ON frames(snapshot_path) WHERE snapshot_path IS NOT NULL\nidx_frames_cloud_blob_id|frames|CREATE INDEX idx_frames_cloud_blob_id\n ON frames(cloud_blob_id) WHERE cloud_blob_id IS NULL AND snapshot_path IS NOT NULL\nidx_frames_sync_id|frames|CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL\nidx_frames_elements_ref_frame_id|frames|CREATE INDEX idx_frames_elements_ref_frame_id\n ON frames(elements_ref_frame_id)\n WHERE elements_ref_frame_id IS NOT NULL\nidx_meetings_start|meetings|CREATE INDEX idx_meetings_start ON meetings(meeting_start)\nidx_meetings_end|meetings|CREATE INDEX idx_meetings_end ON meetings(meeting_end)\nidx_memories_created_at|memories|CREATE INDEX idx_memories_created_at ON memories(created_at)\nidx_memories_importance|memories|CREATE INDEX idx_memories_importance ON memories(importance DESC)\nidx_memories_source|memories|CREATE INDEX idx_memories_source ON memories(source)\nidx_memories_frame_id|memories|CREATE INDEX idx_memories_frame_id ON memories(frame_id)\nidx_ocr_text_frame_id|ocr_text|CREATE INDEX idx_ocr_text_frame_id ON ocr_text(frame_id)\nidx_ocr_text_frame_app_window|ocr_text|CREATE INDEX idx_ocr_text_frame_app_window ON ocr_text(frame_id, app_name, window_name)\nidx_ocr_text_length|ocr_text|CREATE INDEX idx_ocr_text_length ON ocr_text (text_length)\nidx_ocr_text_sync_id|ocr_text|CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL\nidx_pipe_exec_name_status|pipe_executions|CREATE INDEX idx_pipe_exec_name_status ON pipe_executions(pipe_name, status)\nidx_pipe_exec_running|pipe_executions|CREATE INDEX idx_pipe_exec_running ON pipe_executions(status) WHERE status = 'running'\nidx_pipe_exec_name_time|pipe_executions|CREATE INDEX idx_pipe_exec_name_time ON pipe_executions(pipe_name, id DESC)\nidx_ui_events_timestamp|ui_events|CREATE INDEX idx_ui_events_timestamp ON ui_events(timestamp)\nidx_ui_events_event_type|ui_events|CREATE INDEX idx_ui_events_event_type ON ui_events(event_type)\nidx_ui_events_app_name|ui_events|CREATE INDEX idx_ui_events_app_name ON ui_events(app_name)\nidx_ui_events_session_id|ui_events|CREATE INDEX idx_ui_events_session_id ON ui_events(session_id)\nidx_ui_events_frame_id|ui_events|CREATE INDEX idx_ui_events_frame_id ON ui_events(frame_id)\nidx_ui_events_sync_id|ui_events|CREATE INDEX idx_ui_events_sync_id ON ui_events(sync_id)\nidx_ui_events_synced_at|ui_events|CREATE INDEX idx_ui_events_synced_at ON ui_events(synced_at)\nidx_ui_events_unsynced|ui_events|CREATE INDEX idx_ui_events_unsynced ON ui_events(synced_at) WHERE synced_at IS NULL\nidx_video_chunks_device_name|video_chunks|CREATE INDEX idx_video_chunks_device_name ON video_chunks(device_name)\nidx_video_chunks_device_name_id|video_chunks|CREATE INDEX idx_video_chunks_device_name_id ON video_chunks(device_name, id DESC)\nidx_video_chunks_cloud_blob_id|video_chunks|CREATE INDEX idx_video_chunks_cloud_blob_id\n ON video_chunks(cloud_blob_id) WHERE cloud_blob_id IS NULL\nidx_vision_tags_vision_id|vision_tags|CREATE INDEX idx_vision_tags_vision_id ON vision_tags(vision_id)\nidx_vision_tags_tag_id|vision_tags|CREATE INDEX idx_vision_tags_tag_id ON vision_tags(tag_id)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT\n 'elements_fts' as name, COUNT(*) as rows FROM elements_fts\nUNION ALL SELECT 'frames_fts', COUNT(*) FROM frames_fts\nUNION ALL SELECT 'ui_events_fts', COUNT(*) FROM ui_events_fts\nUNION ALL SELECT 'audio_transcriptions_fts', COUNT(*) FROM audio_transcriptions_fts;\"\nelements_fts|2595462\nframes_fts|40394\nui_events_fts|51394\naudio_transcriptions_fts|3\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT name, SUM(payload) as bytes\nFROM dbstat\nWHERE name IN ('elements_fts_data','frames_fts_data','ui_events_fts_data')\nGROUP BY name;\"\nelements_fts_data|49417125\nframes_fts_data|46211048\nui_events_fts_data|1661147\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT name, SUM(payload) as bytes\nFROM dbstat\nWHERE name IN ('frames', 'ui_events', 'elements', 'elements_fts_data','frames_fts_data','ui_events_fts_data')\nGROUP BY name;\"\nelements|334884969\nelements_fts_data|49472096\nframes|689381789\nframes_fts_data|46270876\nui_events|8354906\nui_events_fts_data|1663427\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"SELECT sql FROM sqlite_master WHERE type='table' AND name IN ('elements_fts','frames_fts','ui_events_fts','memories_fts') ORDER BY name;\"\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)\nCREATE VIRTUAL TABLE frames_fts USING fts5(\n full_text,\n app_name,\n window_name,\n browser_url,\n UW PICO 5.09 New Buffer \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n [ Read 1 line ] \n^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos \n^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell \n id UNINDEXED,\n tokenize='unicode61'\n UW PICO 5.09 New Buffer \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n [ Read 1 line ] \n^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos \n^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell \n)\n UW PICO 5.09 New Buffer \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n [ Read 25 lines ] \n^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos \n^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell \nCREATE VIRTUAL TABLE memories_fts USING fts5(\n content,\n tags,\n content='memories',\n content_rowid='id',\n tokenize='unicode61'\n)\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)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ls\nconfig.json\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tdb.sqlite-shm\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-09.0.log\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-13.0.log\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-16.0.log\ndata\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tdb.sqlite-wal\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-11.0.log\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-14.0.log\ndb.sqlite\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tpipes\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-12.0.log\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-15.0.log\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ touch screenpipe_sync.sh\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ll\ntotal 5632584\ndrwxr-xr-x 17 lukas staff 544 16 Apr 19:19 .\n UW PICO 5.09 New Buffer \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n [ Read 25 lines ] \n^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos \n^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell \n UW PICO 5.09 File: screenpipe_sync.sh \n\n# Check NAS mount\nif [ ! -d \"/Volumes/Test/screenpipe\" ]; then\n\u0000\u0000echo \"ERROR: NAS not mounted\"\nelse\n\u0000\u0000echo \"OK: NAS mounted\"\nfi\n\n# Check source DB\nDB_SRC=\"$HOME/.screenpipe/db.sqlite\"\nif [ ! -f \"$DB_SRC\" ]; then\n\u0000\u0000echo \"ERROR: Source DB not found\"\nelse\n\u0000\u0000echo \"OK: Source DB exists\"\n\u0000\u0000du -sh \"$DB_SRC\"\nfi\n\n# Check NAS DB (may not exist yet on first run - that's fine)\nNAS_DB=\"/Volumes/Test/screenpipe/archive.db\"\nif [ ! -f \"$NAS_DB\" ]; then\n\u0000\u0000echo \"INFO: archive.db does not exist yet - will be created on first sync\"\nelse\n\u0000\u0000echo \"OK: archive.db exists\"\n\u0000\u0000du -sh \"$NAS_DB\"\n\u0000\u0000sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) || ' tables' FROM sqlite_master WHERE type='table';\"\nfi\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos \n^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell","depth":4,"value":"idx_elements_source_role_text|elements|CREATE INDEX idx_elements_source_role_text\n ON elements(source, role, frame_id)\n WHERE text IS NOT NULL\nidx_elements_frame_source_role|elements|CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL\nidx_frames_timestamp|frames|CREATE INDEX idx_frames_timestamp ON frames(timestamp)\nidx_frames_video_chunk_id|frames|CREATE INDEX idx_frames_video_chunk_id ON frames(video_chunk_id)\nidx_frames_timestamp_device|frames|CREATE INDEX idx_frames_timestamp_device\n ON frames(timestamp, device_name)\nidx_frames_snapshot_path|frames|CREATE INDEX idx_frames_snapshot_path\n ON frames(snapshot_path) WHERE snapshot_path IS NOT NULL\nidx_frames_cloud_blob_id|frames|CREATE INDEX idx_frames_cloud_blob_id\n ON frames(cloud_blob_id) WHERE cloud_blob_id IS NULL AND snapshot_path IS NOT NULL\nidx_frames_sync_id|frames|CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL\nidx_frames_elements_ref_frame_id|frames|CREATE INDEX idx_frames_elements_ref_frame_id\n ON frames(elements_ref_frame_id)\n WHERE elements_ref_frame_id IS NOT NULL\nidx_meetings_start|meetings|CREATE INDEX idx_meetings_start ON meetings(meeting_start)\nidx_meetings_end|meetings|CREATE INDEX idx_meetings_end ON meetings(meeting_end)\nidx_memories_created_at|memories|CREATE INDEX idx_memories_created_at ON memories(created_at)\nidx_memories_importance|memories|CREATE INDEX idx_memories_importance ON memories(importance DESC)\nidx_memories_source|memories|CREATE INDEX idx_memories_source ON memories(source)\nidx_memories_frame_id|memories|CREATE INDEX idx_memories_frame_id ON memories(frame_id)\nidx_ocr_text_frame_id|ocr_text|CREATE INDEX idx_ocr_text_frame_id ON ocr_text(frame_id)\nidx_ocr_text_frame_app_window|ocr_text|CREATE INDEX idx_ocr_text_frame_app_window ON ocr_text(frame_id, app_name, window_name)\nidx_ocr_text_length|ocr_text|CREATE INDEX idx_ocr_text_length ON ocr_text (text_length)\nidx_ocr_text_sync_id|ocr_text|CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL\nidx_pipe_exec_name_status|pipe_executions|CREATE INDEX idx_pipe_exec_name_status ON pipe_executions(pipe_name, status)\nidx_pipe_exec_running|pipe_executions|CREATE INDEX idx_pipe_exec_running ON pipe_executions(status) WHERE status = 'running'\nidx_pipe_exec_name_time|pipe_executions|CREATE INDEX idx_pipe_exec_name_time ON pipe_executions(pipe_name, id DESC)\nidx_ui_events_timestamp|ui_events|CREATE INDEX idx_ui_events_timestamp ON ui_events(timestamp)\nidx_ui_events_event_type|ui_events|CREATE INDEX idx_ui_events_event_type ON ui_events(event_type)\nidx_ui_events_app_name|ui_events|CREATE INDEX idx_ui_events_app_name ON ui_events(app_name)\nidx_ui_events_session_id|ui_events|CREATE INDEX idx_ui_events_session_id ON ui_events(session_id)\nidx_ui_events_frame_id|ui_events|CREATE INDEX idx_ui_events_frame_id ON ui_events(frame_id)\nidx_ui_events_sync_id|ui_events|CREATE INDEX idx_ui_events_sync_id ON ui_events(sync_id)\nidx_ui_events_synced_at|ui_events|CREATE INDEX idx_ui_events_synced_at ON ui_events(synced_at)\nidx_ui_events_unsynced|ui_events|CREATE INDEX idx_ui_events_unsynced ON ui_events(synced_at) WHERE synced_at IS NULL\nidx_video_chunks_device_name|video_chunks|CREATE INDEX idx_video_chunks_device_name ON video_chunks(device_name)\nidx_video_chunks_device_name_id|video_chunks|CREATE INDEX idx_video_chunks_device_name_id ON video_chunks(device_name, id DESC)\nidx_video_chunks_cloud_blob_id|video_chunks|CREATE INDEX idx_video_chunks_cloud_blob_id\n ON video_chunks(cloud_blob_id) WHERE cloud_blob_id IS NULL\nidx_vision_tags_vision_id|vision_tags|CREATE INDEX idx_vision_tags_vision_id ON vision_tags(vision_id)\nidx_vision_tags_tag_id|vision_tags|CREATE INDEX idx_vision_tags_tag_id ON vision_tags(tag_id)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT\n 'elements_fts' as name, COUNT(*) as rows FROM elements_fts\nUNION ALL SELECT 'frames_fts', COUNT(*) FROM frames_fts\nUNION ALL SELECT 'ui_events_fts', COUNT(*) FROM ui_events_fts\nUNION ALL SELECT 'audio_transcriptions_fts', COUNT(*) FROM audio_transcriptions_fts;\"\nelements_fts|2595462\nframes_fts|40394\nui_events_fts|51394\naudio_transcriptions_fts|3\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT name, SUM(payload) as bytes\nFROM dbstat\nWHERE name IN ('elements_fts_data','frames_fts_data','ui_events_fts_data')\nGROUP BY name;\"\nelements_fts_data|49417125\nframes_fts_data|46211048\nui_events_fts_data|1661147\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT name, SUM(payload) as bytes\nFROM dbstat\nWHERE name IN ('frames', 'ui_events', 'elements', 'elements_fts_data','frames_fts_data','ui_events_fts_data')\nGROUP BY name;\"\nelements|334884969\nelements_fts_data|49472096\nframes|689381789\nframes_fts_data|46270876\nui_events|8354906\nui_events_fts_data|1663427\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"SELECT sql FROM sqlite_master WHERE type='table' AND name IN ('elements_fts','frames_fts','ui_events_fts','memories_fts') ORDER BY name;\"\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)\nCREATE VIRTUAL TABLE frames_fts USING fts5(\n full_text,\n app_name,\n window_name,\n browser_url,\n UW PICO 5.09 New Buffer \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n [ Read 1 line ] \n^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos \n^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell \n id UNINDEXED,\n tokenize='unicode61'\n UW PICO 5.09 New Buffer \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n [ Read 1 line ] \n^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos \n^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell \n)\n UW PICO 5.09 New Buffer \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n [ Read 25 lines ] \n^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos \n^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell \nCREATE VIRTUAL TABLE memories_fts USING fts5(\n content,\n tags,\n content='memories',\n content_rowid='id',\n tokenize='unicode61'\n)\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)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ls\nconfig.json\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tdb.sqlite-shm\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-09.0.log\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-13.0.log\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-16.0.log\ndata\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tdb.sqlite-wal\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-11.0.log\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-14.0.log\ndb.sqlite\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tpipes\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-12.0.log\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-15.0.log\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ touch screenpipe_sync.sh\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ll\ntotal 5632584\ndrwxr-xr-x 17 lukas staff 544 16 Apr 19:19 .\n UW PICO 5.09 New Buffer \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n [ Read 25 lines ] \n^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos \n^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell \n UW PICO 5.09 File: screenpipe_sync.sh \n\n# Check NAS mount\nif [ ! -d \"/Volumes/Test/screenpipe\" ]; then\n\u0000\u0000echo \"ERROR: NAS not mounted\"\nelse\n\u0000\u0000echo \"OK: NAS mounted\"\nfi\n\n# Check source DB\nDB_SRC=\"$HOME/.screenpipe/db.sqlite\"\nif [ ! -f \"$DB_SRC\" ]; then\n\u0000\u0000echo \"ERROR: Source DB not found\"\nelse\n\u0000\u0000echo \"OK: Source DB exists\"\n\u0000\u0000du -sh \"$DB_SRC\"\nfi\n\n# Check NAS DB (may not exist yet on first run - that's fine)\nNAS_DB=\"/Volumes/Test/screenpipe/archive.db\"\nif [ ! -f \"$NAS_DB\" ]; then\n\u0000\u0000echo \"INFO: archive.db does not exist yet - will be created on first sync\"\nelse\n\u0000\u0000echo \"OK: archive.db exists\"\n\u0000\u0000du -sh \"$NAS_DB\"\n\u0000\u0000sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) || ' tables' FROM sqlite_master WHERE type='table';\"\nfi\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos \n^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.23320313,"top":1.0,"width":0.0921875,"height":-0.03680551},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.23554687,"top":1.0,"width":0.00625,"height":-0.039583325},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.32539064,"top":1.0,"width":0.0921875,"height":-0.03680551},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.32773438,"top":1.0,"width":0.00625,"height":-0.039583325},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.41757813,"top":1.0,"width":0.0921875,"height":-0.03680551},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.41992188,"top":1.0,"width":0.00625,"height":-0.039583325},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.5097656,"top":1.0,"width":0.0921875,"height":-0.03680551},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.5121094,"top":1.0,"width":0.00625,"height":-0.039583325},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"nano","depth":2,"bounds":{"left":0.60195315,"top":1.0,"width":0.0921875,"height":-0.03680551},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.60429686,"top":1.0,"width":0.00625,"height":-0.039583325},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"✳ Review screenpipe usage and Boosteroid integration (node)","depth":2,"bounds":{"left":0.6941406,"top":1.0,"width":0.0921875,"height":-0.03680551},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.6964844,"top":1.0,"width":0.00625,"height":-0.039583325},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.7703125,"top":1.0,"width":0.021875,"height":-0.02013886},"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"nano","depth":1,"bounds":{"left":0.50742185,"top":1.0,"width":0.0140625,"height":-0.020833373},"role_description":"text"}]...
|
8021106716519421575
|
-3429880746629370976
|
idle
|
accessibility
|
NULL
|
idx_elements_source_role_text|elements|CREATE INDE idx_elements_source_role_text|elements|CREATE INDEX idx_elements_source_role_text
ON elements(source, role, frame_id)
WHERE text IS NOT NULL
idx_elements_frame_source_role|elements|CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL
idx_frames_timestamp|frames|CREATE INDEX idx_frames_timestamp ON frames(timestamp)
idx_frames_video_chunk_id|frames|CREATE INDEX idx_frames_video_chunk_id ON frames(video_chunk_id)
idx_frames_timestamp_device|frames|CREATE INDEX idx_frames_timestamp_device
ON frames(timestamp, device_name)
idx_frames_snapshot_path|frames|CREATE INDEX idx_frames_snapshot_path
ON frames(snapshot_path) WHERE snapshot_path IS NOT NULL
idx_frames_cloud_blob_id|frames|CREATE INDEX idx_frames_cloud_blob_id
ON frames(cloud_blob_id) WHERE cloud_blob_id IS NULL AND snapshot_path IS NOT NULL
idx_frames_sync_id|frames|CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL
idx_frames_elements_ref_frame_id|frames|CREATE INDEX idx_frames_elements_ref_frame_id
ON frames(elements_ref_frame_id)
WHERE elements_ref_frame_id IS NOT NULL
idx_meetings_start|meetings|CREATE INDEX idx_meetings_start ON meetings(meeting_start)
idx_meetings_end|meetings|CREATE INDEX idx_meetings_end ON meetings(meeting_end)
idx_memories_created_at|memories|CREATE INDEX idx_memories_created_at ON memories(created_at)
idx_memories_importance|memories|CREATE INDEX idx_memories_importance ON memories(importance DESC)
idx_memories_source|memories|CREATE INDEX idx_memories_source ON memories(source)
idx_memories_frame_id|memories|CREATE INDEX idx_memories_frame_id ON memories(frame_id)
idx_ocr_text_frame_id|ocr_text|CREATE INDEX idx_ocr_text_frame_id ON ocr_text(frame_id)
idx_ocr_text_frame_app_window|ocr_text|CREATE INDEX idx_ocr_text_frame_app_window ON ocr_text(frame_id, app_name, window_name)
idx_ocr_text_length|ocr_text|CREATE INDEX idx_ocr_text_length ON ocr_text (text_length)
idx_ocr_text_sync_id|ocr_text|CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL
idx_pipe_exec_name_status|pipe_executions|CREATE INDEX idx_pipe_exec_name_status ON pipe_executions(pipe_name, status)
idx_pipe_exec_running|pipe_executions|CREATE INDEX idx_pipe_exec_running ON pipe_executions(status) WHERE status = 'running'
idx_pipe_exec_name_time|pipe_executions|CREATE INDEX idx_pipe_exec_name_time ON pipe_executions(pipe_name, id DESC)
idx_ui_events_timestamp|ui_events|CREATE INDEX idx_ui_events_timestamp ON ui_events(timestamp)
idx_ui_events_event_type|ui_events|CREATE INDEX idx_ui_events_event_type ON ui_events(event_type)
idx_ui_events_app_name|ui_events|CREATE INDEX idx_ui_events_app_name ON ui_events(app_name)
idx_ui_events_session_id|ui_events|CREATE INDEX idx_ui_events_session_id ON ui_events(session_id)
idx_ui_events_frame_id|ui_events|CREATE INDEX idx_ui_events_frame_id ON ui_events(frame_id)
idx_ui_events_sync_id|ui_events|CREATE INDEX idx_ui_events_sync_id ON ui_events(sync_id)
idx_ui_events_synced_at|ui_events|CREATE INDEX idx_ui_events_synced_at ON ui_events(synced_at)
idx_ui_events_unsynced|ui_events|CREATE INDEX idx_ui_events_unsynced ON ui_events(synced_at) WHERE synced_at IS NULL
idx_video_chunks_device_name|video_chunks|CREATE INDEX idx_video_chunks_device_name ON video_chunks(device_name)
idx_video_chunks_device_name_id|video_chunks|CREATE INDEX idx_video_chunks_device_name_id ON video_chunks(device_name, id DESC)
idx_video_chunks_cloud_blob_id|video_chunks|CREATE INDEX idx_video_chunks_cloud_blob_id
ON video_chunks(cloud_blob_id) WHERE cloud_blob_id IS NULL
idx_vision_tags_vision_id|vision_tags|CREATE INDEX idx_vision_tags_vision_id ON vision_tags(vision_id)
idx_vision_tags_tag_id|vision_tags|CREATE INDEX idx_vision_tags_tag_id ON vision_tags(tag_id)
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT
'elements_fts' as name, COUNT(*) as rows FROM elements_fts
UNION ALL SELECT 'frames_fts', COUNT(*) FROM frames_fts
UNION ALL SELECT 'ui_events_fts', COUNT(*) FROM ui_events_fts
UNION ALL SELECT 'audio_transcriptions_fts', COUNT(*) FROM audio_transcriptions_fts;"
elements_fts|2595462
frames_fts|40394
ui_events_fts|51394
audio_transcriptions_fts|3
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT name, SUM(payload) as bytes
FROM dbstat
WHERE name IN ('elements_fts_data','frames_fts_data','ui_events_fts_data')
GROUP BY name;"
elements_fts_data|49417125
frames_fts_data|46211048
ui_events_fts_data|1661147
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT name, SUM(payload) as bytes
FROM dbstat
WHERE name IN ('frames', 'ui_events', 'elements', 'elements_fts_data','frames_fts_data','ui_events_fts_data')
GROUP BY name;"
elements|334884969
elements_fts_data|49472096
frames|689381789
frames_fts_data|46270876
ui_events|8354906
ui_events_fts_data|1663427
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT sql FROM sqlite_master WHERE type='table' AND name IN ('elements_fts','frames_fts','ui_events_fts','memories_fts') ORDER BY name;"
CREATE VIRTUAL TABLE elements_fts USING fts5(
text,
role,
frame_id UNINDEXED,
content='elements',
content_rowid='id',
tokenize='unicode61'
)
CREATE VIRTUAL TABLE frames_fts USING fts5(
full_text,
app_name,
window_name,
browser_url,
UW PICO 5.09 New Buffer
[ Read 1 line ]
^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos
^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell
id UNINDEXED,
tokenize='unicode61'
UW PICO 5.09 New Buffer
[ Read 1 line ]
^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos
^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell
)
UW PICO 5.09 New Buffer
[ Read 25 lines ]
^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos
^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell
CREATE VIRTUAL TABLE memories_fts USING fts5(
content,
tags,
content='memories',
content_rowid='id',
tokenize='unicode61'
)
CREATE VIRTUAL TABLE ui_events_fts USING fts5(
text_content,
app_name,
window_title,
element_name,
content='ui_events',
content_rowid='id',
tokenize='unicode61'
)
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ls
config.json db.sqlite-shm screenpipe.2026-04-09.0.log screenpipe.2026-04-13.0.log screenpipe.2026-04-16.0.log
data db.sqlite-wal screenpipe.2026-04-11.0.log screenpipe.2026-04-14.0.log
db.sqlite pipes screenpipe.2026-04-12.0.log screenpipe.2026-04-15.0.log
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ touch screenpipe_sync.sh
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ll
total 5632584
drwxr-xr-x 17 lukas staff 544 16 Apr 19:19 .
UW PICO 5.09 New Buffer
[ Read 25 lines ]
^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos
^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell
UW PICO 5.09 File: screenpipe_sync.sh
# Check NAS mount
if [ ! -d "/Volumes/Test/screenpipe" ]; then
echo "ERROR: NAS not mounted"
else
echo "OK: NAS mounted"
fi
# Check source DB
DB_SRC="$HOME/.screenpipe/db.sqlite"
if [ ! -f "$DB_SRC" ]; then
echo "ERROR: Source DB not found"
else
echo "OK: Source DB exists"
du -sh "$DB_SRC"
fi
# Check NAS DB (may not exist yet on first run - that's fine)
NAS_DB="/Volumes/Test/screenpipe/archive.db"
if [ ! -f "$NAS_DB" ]; then
echo "INFO: archive.db does not exist yet - will be created on first sync"
else
echo "OK: archive.db exists"
du -sh "$NAS_DB"
sqlite3 "$NAS_DB" "SELECT COUNT(*) || ' tables' FROM sqlite_master WHERE type='table';"
fi
^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos
^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
screenpipe"
Close Tab
nano
Close Tab
✳ Review screenpipe usage and Boosteroid integration (node)
Close Tab
⌥⌘1
nano...
|
40571
|
|
40572
|
NULL
|
0
|
2026-04-16T16:29:02.261283+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-16/1776 /Users/lukas/.screenpipe/data/data/2026-04-16/1776356942261_m1.jpg...
|
iTerm2
|
nano
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
idx_elements_source_role_text|elements|CREATE INDE idx_elements_source_role_text|elements|CREATE INDEX idx_elements_source_role_text
ON elements(source, role, frame_id)
WHERE text IS NOT NULL
idx_elements_frame_source_role|elements|CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL
idx_frames_timestamp|frames|CREATE INDEX idx_frames_timestamp ON frames(timestamp)
idx_frames_video_chunk_id|frames|CREATE INDEX idx_frames_video_chunk_id ON frames(video_chunk_id)
idx_frames_timestamp_device|frames|CREATE INDEX idx_frames_timestamp_device
ON frames(timestamp, device_name)
idx_frames_snapshot_path|frames|CREATE INDEX idx_frames_snapshot_path
ON frames(snapshot_path) WHERE snapshot_path IS NOT NULL
idx_frames_cloud_blob_id|frames|CREATE INDEX idx_frames_cloud_blob_id
ON frames(cloud_blob_id) WHERE cloud_blob_id IS NULL AND snapshot_path IS NOT NULL
idx_frames_sync_id|frames|CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL
idx_frames_elements_ref_frame_id|frames|CREATE INDEX idx_frames_elements_ref_frame_id
ON frames(elements_ref_frame_id)
WHERE elements_ref_frame_id IS NOT NULL
idx_meetings_start|meetings|CREATE INDEX idx_meetings_start ON meetings(meeting_start)
idx_meetings_end|meetings|CREATE INDEX idx_meetings_end ON meetings(meeting_end)
idx_memories_created_at|memories|CREATE INDEX idx_memories_created_at ON memories(created_at)
idx_memories_importance|memories|CREATE INDEX idx_memories_importance ON memories(importance DESC)
idx_memories_source|memories|CREATE INDEX idx_memories_source ON memories(source)
idx_memories_frame_id|memories|CREATE INDEX idx_memories_frame_id ON memories(frame_id)
idx_ocr_text_frame_id|ocr_text|CREATE INDEX idx_ocr_text_frame_id ON ocr_text(frame_id)
idx_ocr_text_frame_app_window|ocr_text|CREATE INDEX idx_ocr_text_frame_app_window ON ocr_text(frame_id, app_name, window_name)
idx_ocr_text_length|ocr_text|CREATE INDEX idx_ocr_text_length ON ocr_text (text_length)
idx_ocr_text_sync_id|ocr_text|CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL
idx_pipe_exec_name_status|pipe_executions|CREATE INDEX idx_pipe_exec_name_status ON pipe_executions(pipe_name, status)
idx_pipe_exec_running|pipe_executions|CREATE INDEX idx_pipe_exec_running ON pipe_executions(status) WHERE status = 'running'
idx_pipe_exec_name_time|pipe_executions|CREATE INDEX idx_pipe_exec_name_time ON pipe_executions(pipe_name, id DESC)
idx_ui_events_timestamp|ui_events|CREATE INDEX idx_ui_events_timestamp ON ui_events(timestamp)
idx_ui_events_event_type|ui_events|CREATE INDEX idx_ui_events_event_type ON ui_events(event_type)
idx_ui_events_app_name|ui_events|CREATE INDEX idx_ui_events_app_name ON ui_events(app_name)
idx_ui_events_session_id|ui_events|CREATE INDEX idx_ui_events_session_id ON ui_events(session_id)
idx_ui_events_frame_id|ui_events|CREATE INDEX idx_ui_events_frame_id ON ui_events(frame_id)
idx_ui_events_sync_id|ui_events|CREATE INDEX idx_ui_events_sync_id ON ui_events(sync_id)
idx_ui_events_synced_at|ui_events|CREATE INDEX idx_ui_events_synced_at ON ui_events(synced_at)
idx_ui_events_unsynced|ui_events|CREATE INDEX idx_ui_events_unsynced ON ui_events(synced_at) WHERE synced_at IS NULL
idx_video_chunks_device_name|video_chunks|CREATE INDEX idx_video_chunks_device_name ON video_chunks(device_name)
idx_video_chunks_device_name_id|video_chunks|CREATE INDEX idx_video_chunks_device_name_id ON video_chunks(device_name, id DESC)
idx_video_chunks_cloud_blob_id|video_chunks|CREATE INDEX idx_video_chunks_cloud_blob_id
ON video_chunks(cloud_blob_id) WHERE cloud_blob_id IS NULL
idx_vision_tags_vision_id|vision_tags|CREATE INDEX idx_vision_tags_vision_id ON vision_tags(vision_id)
idx_vision_tags_tag_id|vision_tags|CREATE INDEX idx_vision_tags_tag_id ON vision_tags(tag_id)
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT
'elements_fts' as name, COUNT(*) as rows FROM elements_fts
UNION ALL SELECT 'frames_fts', COUNT(*) FROM frames_fts
UNION ALL SELECT 'ui_events_fts', COUNT(*) FROM ui_events_fts
UNION ALL SELECT 'audio_transcriptions_fts', COUNT(*) FROM audio_transcriptions_fts;"
elements_fts|2595462
frames_fts|40394
ui_events_fts|51394
audio_transcriptions_fts|3
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT name, SUM(payload) as bytes
FROM dbstat
WHERE name IN ('elements_fts_data','frames_fts_data','ui_events_fts_data')
GROUP BY name;"
elements_fts_data|49417125
frames_fts_data|46211048
ui_events_fts_data|1661147
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT name, SUM(payload) as bytes
FROM dbstat
WHERE name IN ('frames', 'ui_events', 'elements', 'elements_fts_data','frames_fts_data','ui_events_fts_data')
GROUP BY name;"
elements|334884969
elements_fts_data|49472096
frames|689381789
frames_fts_data|46270876
ui_events|8354906
ui_events_fts_data|1663427
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT sql FROM sqlite_master WHERE type='table' AND name IN ('elements_fts','frames_fts','ui_events_fts','memories_fts') ORDER BY name;"
CREATE VIRTUAL TABLE elements_fts USING fts5(
text,
role,
frame_id UNINDEXED,
content='elements',
content_rowid='id',
tokenize='unicode61'
)
CREATE VIRTUAL TABLE frames_fts USING fts5(
full_text,
app_name,
window_name,
browser_url,
UW PICO 5.09 New Buffer
[ Read 1 line ]
^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos
^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell
id UNINDEXED,
tokenize='unicode61'
UW PICO 5.09 New Buffer
[ Read 1 line ]
^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos
^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell
)
UW PICO 5.09 New Buffer
[ Read 25 lines ]
^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos
^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell
CREATE VIRTUAL TABLE memories_fts USING fts5(
content,
tags,
content='memories',
content_rowid='id',
tokenize='unicode61'
)
CREATE VIRTUAL TABLE ui_events_fts USING fts5(
text_content,
app_name,
window_title,
element_name,
content='ui_events',
content_rowid='id',
tokenize='unicode61'
)
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ls
config.json db.sqlite-shm screenpipe.2026-04-09.0.log screenpipe.2026-04-13.0.log screenpipe.2026-04-16.0.log
data db.sqlite-wal screenpipe.2026-04-11.0.log screenpipe.2026-04-14.0.log
db.sqlite pipes screenpipe.2026-04-12.0.log screenpipe.2026-04-15.0.log
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ touch screenpipe_sync.sh
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ll
total 5632584
drwxr-xr-x 17 lukas staff 544 16 Apr 19:19 .
UW PICO 5.09 New Buffer
[ Read 25 lines ]
^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos
^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell
UW PICO 5.09 File: screenpipe_sync.sh
# Check NAS mount
if [ ! -d "/Volumes/Test/screenpipe" ]; then
echo "ERROR: NAS not mounted"
else
echo "OK: NAS mounted"
fi
# Check source DB
DB_SRC="$HOME/.screenpipe/db.sqlite"
if [ ! -f "$DB_SRC" ]; then
echo "ERROR: Source DB not found"
else
echo "OK: Source DB exists"
du -sh "$DB_SRC"
fi
# Check NAS DB (may not exist yet on first run - that's fine)
NAS_DB="/Volumes/Test/screenpipe/archive.db"
if [ ! -f "$NAS_DB" ]; then
echo "INFO: archive.db does not exist yet - will be created on first sync"
else
echo "OK: archive.db exists"
du -sh "$NAS_DB"
sqlite3 "$NAS_DB" "SELECT COUNT(*) || ' tables' FROM sqlite_master WHERE type='table';"
fi
^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos
^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
screenpipe"
Close Tab
nano
Close Tab
✳ Review screenpipe usage and Boosteroid integration (node)
Close Tab
⌥⌘1
nano...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"idx_elements_source_role_text|elements|CREATE INDEX idx_elements_source_role_text\n ON elements(source, role, frame_id)\n WHERE text IS NOT NULL\nidx_elements_frame_source_role|elements|CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL\nidx_frames_timestamp|frames|CREATE INDEX idx_frames_timestamp ON frames(timestamp)\nidx_frames_video_chunk_id|frames|CREATE INDEX idx_frames_video_chunk_id ON frames(video_chunk_id)\nidx_frames_timestamp_device|frames|CREATE INDEX idx_frames_timestamp_device\n ON frames(timestamp, device_name)\nidx_frames_snapshot_path|frames|CREATE INDEX idx_frames_snapshot_path\n ON frames(snapshot_path) WHERE snapshot_path IS NOT NULL\nidx_frames_cloud_blob_id|frames|CREATE INDEX idx_frames_cloud_blob_id\n ON frames(cloud_blob_id) WHERE cloud_blob_id IS NULL AND snapshot_path IS NOT NULL\nidx_frames_sync_id|frames|CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL\nidx_frames_elements_ref_frame_id|frames|CREATE INDEX idx_frames_elements_ref_frame_id\n ON frames(elements_ref_frame_id)\n WHERE elements_ref_frame_id IS NOT NULL\nidx_meetings_start|meetings|CREATE INDEX idx_meetings_start ON meetings(meeting_start)\nidx_meetings_end|meetings|CREATE INDEX idx_meetings_end ON meetings(meeting_end)\nidx_memories_created_at|memories|CREATE INDEX idx_memories_created_at ON memories(created_at)\nidx_memories_importance|memories|CREATE INDEX idx_memories_importance ON memories(importance DESC)\nidx_memories_source|memories|CREATE INDEX idx_memories_source ON memories(source)\nidx_memories_frame_id|memories|CREATE INDEX idx_memories_frame_id ON memories(frame_id)\nidx_ocr_text_frame_id|ocr_text|CREATE INDEX idx_ocr_text_frame_id ON ocr_text(frame_id)\nidx_ocr_text_frame_app_window|ocr_text|CREATE INDEX idx_ocr_text_frame_app_window ON ocr_text(frame_id, app_name, window_name)\nidx_ocr_text_length|ocr_text|CREATE INDEX idx_ocr_text_length ON ocr_text (text_length)\nidx_ocr_text_sync_id|ocr_text|CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL\nidx_pipe_exec_name_status|pipe_executions|CREATE INDEX idx_pipe_exec_name_status ON pipe_executions(pipe_name, status)\nidx_pipe_exec_running|pipe_executions|CREATE INDEX idx_pipe_exec_running ON pipe_executions(status) WHERE status = 'running'\nidx_pipe_exec_name_time|pipe_executions|CREATE INDEX idx_pipe_exec_name_time ON pipe_executions(pipe_name, id DESC)\nidx_ui_events_timestamp|ui_events|CREATE INDEX idx_ui_events_timestamp ON ui_events(timestamp)\nidx_ui_events_event_type|ui_events|CREATE INDEX idx_ui_events_event_type ON ui_events(event_type)\nidx_ui_events_app_name|ui_events|CREATE INDEX idx_ui_events_app_name ON ui_events(app_name)\nidx_ui_events_session_id|ui_events|CREATE INDEX idx_ui_events_session_id ON ui_events(session_id)\nidx_ui_events_frame_id|ui_events|CREATE INDEX idx_ui_events_frame_id ON ui_events(frame_id)\nidx_ui_events_sync_id|ui_events|CREATE INDEX idx_ui_events_sync_id ON ui_events(sync_id)\nidx_ui_events_synced_at|ui_events|CREATE INDEX idx_ui_events_synced_at ON ui_events(synced_at)\nidx_ui_events_unsynced|ui_events|CREATE INDEX idx_ui_events_unsynced ON ui_events(synced_at) WHERE synced_at IS NULL\nidx_video_chunks_device_name|video_chunks|CREATE INDEX idx_video_chunks_device_name ON video_chunks(device_name)\nidx_video_chunks_device_name_id|video_chunks|CREATE INDEX idx_video_chunks_device_name_id ON video_chunks(device_name, id DESC)\nidx_video_chunks_cloud_blob_id|video_chunks|CREATE INDEX idx_video_chunks_cloud_blob_id\n ON video_chunks(cloud_blob_id) WHERE cloud_blob_id IS NULL\nidx_vision_tags_vision_id|vision_tags|CREATE INDEX idx_vision_tags_vision_id ON vision_tags(vision_id)\nidx_vision_tags_tag_id|vision_tags|CREATE INDEX idx_vision_tags_tag_id ON vision_tags(tag_id)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT\n 'elements_fts' as name, COUNT(*) as rows FROM elements_fts\nUNION ALL SELECT 'frames_fts', COUNT(*) FROM frames_fts\nUNION ALL SELECT 'ui_events_fts', COUNT(*) FROM ui_events_fts\nUNION ALL SELECT 'audio_transcriptions_fts', COUNT(*) FROM audio_transcriptions_fts;\"\nelements_fts|2595462\nframes_fts|40394\nui_events_fts|51394\naudio_transcriptions_fts|3\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT name, SUM(payload) as bytes\nFROM dbstat\nWHERE name IN ('elements_fts_data','frames_fts_data','ui_events_fts_data')\nGROUP BY name;\"\nelements_fts_data|49417125\nframes_fts_data|46211048\nui_events_fts_data|1661147\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT name, SUM(payload) as bytes\nFROM dbstat\nWHERE name IN ('frames', 'ui_events', 'elements', 'elements_fts_data','frames_fts_data','ui_events_fts_data')\nGROUP BY name;\"\nelements|334884969\nelements_fts_data|49472096\nframes|689381789\nframes_fts_data|46270876\nui_events|8354906\nui_events_fts_data|1663427\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"SELECT sql FROM sqlite_master WHERE type='table' AND name IN ('elements_fts','frames_fts','ui_events_fts','memories_fts') ORDER BY name;\"\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)\nCREATE VIRTUAL TABLE frames_fts USING fts5(\n full_text,\n app_name,\n window_name,\n browser_url,\n UW PICO 5.09 New Buffer \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n [ Read 1 line ] \n^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos \n^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell \n id UNINDEXED,\n tokenize='unicode61'\n UW PICO 5.09 New Buffer \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n [ Read 1 line ] \n^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos \n^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell \n)\n UW PICO 5.09 New Buffer \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n [ Read 25 lines ] \n^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos \n^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell \nCREATE VIRTUAL TABLE memories_fts USING fts5(\n content,\n tags,\n content='memories',\n content_rowid='id',\n tokenize='unicode61'\n)\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)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ls\nconfig.json\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tdb.sqlite-shm\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-09.0.log\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-13.0.log\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-16.0.log\ndata\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tdb.sqlite-wal\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-11.0.log\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-14.0.log\ndb.sqlite\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tpipes\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-12.0.log\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-15.0.log\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ touch screenpipe_sync.sh\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ll\ntotal 5632584\ndrwxr-xr-x 17 lukas staff 544 16 Apr 19:19 .\n UW PICO 5.09 New Buffer \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n [ Read 25 lines ] \n^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos \n^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell \n UW PICO 5.09 File: screenpipe_sync.sh \n\n# Check NAS mount\nif [ ! -d \"/Volumes/Test/screenpipe\" ]; then\n\u0000\u0000echo \"ERROR: NAS not mounted\"\nelse\n\u0000\u0000echo \"OK: NAS mounted\"\nfi\n\n# Check source DB\nDB_SRC=\"$HOME/.screenpipe/db.sqlite\"\nif [ ! -f \"$DB_SRC\" ]; then\n\u0000\u0000echo \"ERROR: Source DB not found\"\nelse\n\u0000\u0000echo \"OK: Source DB exists\"\n\u0000\u0000du -sh \"$DB_SRC\"\nfi\n\n# Check NAS DB (may not exist yet on first run - that's fine)\nNAS_DB=\"/Volumes/Test/screenpipe/archive.db\"\nif [ ! -f \"$NAS_DB\" ]; then\n\u0000\u0000echo \"INFO: archive.db does not exist yet - will be created on first sync\"\nelse\n\u0000\u0000echo \"OK: archive.db exists\"\n\u0000\u0000du -sh \"$NAS_DB\"\n\u0000\u0000sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) || ' tables' FROM sqlite_master WHERE type='table';\"\nfi\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos \n^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell","depth":4,"value":"idx_elements_source_role_text|elements|CREATE INDEX idx_elements_source_role_text\n ON elements(source, role, frame_id)\n WHERE text IS NOT NULL\nidx_elements_frame_source_role|elements|CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL\nidx_frames_timestamp|frames|CREATE INDEX idx_frames_timestamp ON frames(timestamp)\nidx_frames_video_chunk_id|frames|CREATE INDEX idx_frames_video_chunk_id ON frames(video_chunk_id)\nidx_frames_timestamp_device|frames|CREATE INDEX idx_frames_timestamp_device\n ON frames(timestamp, device_name)\nidx_frames_snapshot_path|frames|CREATE INDEX idx_frames_snapshot_path\n ON frames(snapshot_path) WHERE snapshot_path IS NOT NULL\nidx_frames_cloud_blob_id|frames|CREATE INDEX idx_frames_cloud_blob_id\n ON frames(cloud_blob_id) WHERE cloud_blob_id IS NULL AND snapshot_path IS NOT NULL\nidx_frames_sync_id|frames|CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL\nidx_frames_elements_ref_frame_id|frames|CREATE INDEX idx_frames_elements_ref_frame_id\n ON frames(elements_ref_frame_id)\n WHERE elements_ref_frame_id IS NOT NULL\nidx_meetings_start|meetings|CREATE INDEX idx_meetings_start ON meetings(meeting_start)\nidx_meetings_end|meetings|CREATE INDEX idx_meetings_end ON meetings(meeting_end)\nidx_memories_created_at|memories|CREATE INDEX idx_memories_created_at ON memories(created_at)\nidx_memories_importance|memories|CREATE INDEX idx_memories_importance ON memories(importance DESC)\nidx_memories_source|memories|CREATE INDEX idx_memories_source ON memories(source)\nidx_memories_frame_id|memories|CREATE INDEX idx_memories_frame_id ON memories(frame_id)\nidx_ocr_text_frame_id|ocr_text|CREATE INDEX idx_ocr_text_frame_id ON ocr_text(frame_id)\nidx_ocr_text_frame_app_window|ocr_text|CREATE INDEX idx_ocr_text_frame_app_window ON ocr_text(frame_id, app_name, window_name)\nidx_ocr_text_length|ocr_text|CREATE INDEX idx_ocr_text_length ON ocr_text (text_length)\nidx_ocr_text_sync_id|ocr_text|CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL\nidx_pipe_exec_name_status|pipe_executions|CREATE INDEX idx_pipe_exec_name_status ON pipe_executions(pipe_name, status)\nidx_pipe_exec_running|pipe_executions|CREATE INDEX idx_pipe_exec_running ON pipe_executions(status) WHERE status = 'running'\nidx_pipe_exec_name_time|pipe_executions|CREATE INDEX idx_pipe_exec_name_time ON pipe_executions(pipe_name, id DESC)\nidx_ui_events_timestamp|ui_events|CREATE INDEX idx_ui_events_timestamp ON ui_events(timestamp)\nidx_ui_events_event_type|ui_events|CREATE INDEX idx_ui_events_event_type ON ui_events(event_type)\nidx_ui_events_app_name|ui_events|CREATE INDEX idx_ui_events_app_name ON ui_events(app_name)\nidx_ui_events_session_id|ui_events|CREATE INDEX idx_ui_events_session_id ON ui_events(session_id)\nidx_ui_events_frame_id|ui_events|CREATE INDEX idx_ui_events_frame_id ON ui_events(frame_id)\nidx_ui_events_sync_id|ui_events|CREATE INDEX idx_ui_events_sync_id ON ui_events(sync_id)\nidx_ui_events_synced_at|ui_events|CREATE INDEX idx_ui_events_synced_at ON ui_events(synced_at)\nidx_ui_events_unsynced|ui_events|CREATE INDEX idx_ui_events_unsynced ON ui_events(synced_at) WHERE synced_at IS NULL\nidx_video_chunks_device_name|video_chunks|CREATE INDEX idx_video_chunks_device_name ON video_chunks(device_name)\nidx_video_chunks_device_name_id|video_chunks|CREATE INDEX idx_video_chunks_device_name_id ON video_chunks(device_name, id DESC)\nidx_video_chunks_cloud_blob_id|video_chunks|CREATE INDEX idx_video_chunks_cloud_blob_id\n ON video_chunks(cloud_blob_id) WHERE cloud_blob_id IS NULL\nidx_vision_tags_vision_id|vision_tags|CREATE INDEX idx_vision_tags_vision_id ON vision_tags(vision_id)\nidx_vision_tags_tag_id|vision_tags|CREATE INDEX idx_vision_tags_tag_id ON vision_tags(tag_id)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT\n 'elements_fts' as name, COUNT(*) as rows FROM elements_fts\nUNION ALL SELECT 'frames_fts', COUNT(*) FROM frames_fts\nUNION ALL SELECT 'ui_events_fts', COUNT(*) FROM ui_events_fts\nUNION ALL SELECT 'audio_transcriptions_fts', COUNT(*) FROM audio_transcriptions_fts;\"\nelements_fts|2595462\nframes_fts|40394\nui_events_fts|51394\naudio_transcriptions_fts|3\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT name, SUM(payload) as bytes\nFROM dbstat\nWHERE name IN ('elements_fts_data','frames_fts_data','ui_events_fts_data')\nGROUP BY name;\"\nelements_fts_data|49417125\nframes_fts_data|46211048\nui_events_fts_data|1661147\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT name, SUM(payload) as bytes\nFROM dbstat\nWHERE name IN ('frames', 'ui_events', 'elements', 'elements_fts_data','frames_fts_data','ui_events_fts_data')\nGROUP BY name;\"\nelements|334884969\nelements_fts_data|49472096\nframes|689381789\nframes_fts_data|46270876\nui_events|8354906\nui_events_fts_data|1663427\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"SELECT sql FROM sqlite_master WHERE type='table' AND name IN ('elements_fts','frames_fts','ui_events_fts','memories_fts') ORDER BY name;\"\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)\nCREATE VIRTUAL TABLE frames_fts USING fts5(\n full_text,\n app_name,\n window_name,\n browser_url,\n UW PICO 5.09 New Buffer \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n [ Read 1 line ] \n^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos \n^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell \n id UNINDEXED,\n tokenize='unicode61'\n UW PICO 5.09 New Buffer \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n [ Read 1 line ] \n^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos \n^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell \n)\n UW PICO 5.09 New Buffer \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n [ Read 25 lines ] \n^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos \n^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell \nCREATE VIRTUAL TABLE memories_fts USING fts5(\n content,\n tags,\n content='memories',\n content_rowid='id',\n tokenize='unicode61'\n)\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)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ls\nconfig.json\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tdb.sqlite-shm\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-09.0.log\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-13.0.log\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-16.0.log\ndata\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tdb.sqlite-wal\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-11.0.log\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-14.0.log\ndb.sqlite\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tpipes\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-12.0.log\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-15.0.log\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ touch screenpipe_sync.sh\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ll\ntotal 5632584\ndrwxr-xr-x 17 lukas staff 544 16 Apr 19:19 .\n UW PICO 5.09 New Buffer \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n [ Read 25 lines ] \n^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos \n^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell \n UW PICO 5.09 File: screenpipe_sync.sh \n\n# Check NAS mount\nif [ ! -d \"/Volumes/Test/screenpipe\" ]; then\n\u0000\u0000echo \"ERROR: NAS not mounted\"\nelse\n\u0000\u0000echo \"OK: NAS mounted\"\nfi\n\n# Check source DB\nDB_SRC=\"$HOME/.screenpipe/db.sqlite\"\nif [ ! -f \"$DB_SRC\" ]; then\n\u0000\u0000echo \"ERROR: Source DB not found\"\nelse\n\u0000\u0000echo \"OK: Source DB exists\"\n\u0000\u0000du -sh \"$DB_SRC\"\nfi\n\n# Check NAS DB (may not exist yet on first run - that's fine)\nNAS_DB=\"/Volumes/Test/screenpipe/archive.db\"\nif [ ! -f \"$NAS_DB\" ]; then\n\u0000\u0000echo \"INFO: archive.db does not exist yet - will be created on first sync\"\nelse\n\u0000\u0000echo \"OK: archive.db exists\"\n\u0000\u0000du -sh \"$NAS_DB\"\n\u0000\u0000sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) || ' tables' FROM sqlite_master WHERE type='table';\"\nfi\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos \n^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.16388889,"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.16388889,"top":0.05888889,"width":0.16388889,"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.16805555,"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.32777777,"top":0.05888889,"width":0.16388889,"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.33194444,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.49166667,"top":0.05888889,"width":0.16388889,"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.49583334,"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":"nano","depth":2,"bounds":{"left":0.65555555,"top":0.05888889,"width":0.16388889,"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.6597222,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"✳ Review screenpipe usage and Boosteroid integration (node)","depth":2,"bounds":{"left":0.8194444,"top":0.05888889,"width":0.16388889,"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.82361114,"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":"nano","depth":1,"bounds":{"left":0.4875,"top":0.033333335,"width":0.025,"height":0.017777778},"role_description":"text"}]...
|
8021106716519421575
|
-3429880746629370976
|
idle
|
accessibility
|
NULL
|
idx_elements_source_role_text|elements|CREATE INDE idx_elements_source_role_text|elements|CREATE INDEX idx_elements_source_role_text
ON elements(source, role, frame_id)
WHERE text IS NOT NULL
idx_elements_frame_source_role|elements|CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL
idx_frames_timestamp|frames|CREATE INDEX idx_frames_timestamp ON frames(timestamp)
idx_frames_video_chunk_id|frames|CREATE INDEX idx_frames_video_chunk_id ON frames(video_chunk_id)
idx_frames_timestamp_device|frames|CREATE INDEX idx_frames_timestamp_device
ON frames(timestamp, device_name)
idx_frames_snapshot_path|frames|CREATE INDEX idx_frames_snapshot_path
ON frames(snapshot_path) WHERE snapshot_path IS NOT NULL
idx_frames_cloud_blob_id|frames|CREATE INDEX idx_frames_cloud_blob_id
ON frames(cloud_blob_id) WHERE cloud_blob_id IS NULL AND snapshot_path IS NOT NULL
idx_frames_sync_id|frames|CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL
idx_frames_elements_ref_frame_id|frames|CREATE INDEX idx_frames_elements_ref_frame_id
ON frames(elements_ref_frame_id)
WHERE elements_ref_frame_id IS NOT NULL
idx_meetings_start|meetings|CREATE INDEX idx_meetings_start ON meetings(meeting_start)
idx_meetings_end|meetings|CREATE INDEX idx_meetings_end ON meetings(meeting_end)
idx_memories_created_at|memories|CREATE INDEX idx_memories_created_at ON memories(created_at)
idx_memories_importance|memories|CREATE INDEX idx_memories_importance ON memories(importance DESC)
idx_memories_source|memories|CREATE INDEX idx_memories_source ON memories(source)
idx_memories_frame_id|memories|CREATE INDEX idx_memories_frame_id ON memories(frame_id)
idx_ocr_text_frame_id|ocr_text|CREATE INDEX idx_ocr_text_frame_id ON ocr_text(frame_id)
idx_ocr_text_frame_app_window|ocr_text|CREATE INDEX idx_ocr_text_frame_app_window ON ocr_text(frame_id, app_name, window_name)
idx_ocr_text_length|ocr_text|CREATE INDEX idx_ocr_text_length ON ocr_text (text_length)
idx_ocr_text_sync_id|ocr_text|CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL
idx_pipe_exec_name_status|pipe_executions|CREATE INDEX idx_pipe_exec_name_status ON pipe_executions(pipe_name, status)
idx_pipe_exec_running|pipe_executions|CREATE INDEX idx_pipe_exec_running ON pipe_executions(status) WHERE status = 'running'
idx_pipe_exec_name_time|pipe_executions|CREATE INDEX idx_pipe_exec_name_time ON pipe_executions(pipe_name, id DESC)
idx_ui_events_timestamp|ui_events|CREATE INDEX idx_ui_events_timestamp ON ui_events(timestamp)
idx_ui_events_event_type|ui_events|CREATE INDEX idx_ui_events_event_type ON ui_events(event_type)
idx_ui_events_app_name|ui_events|CREATE INDEX idx_ui_events_app_name ON ui_events(app_name)
idx_ui_events_session_id|ui_events|CREATE INDEX idx_ui_events_session_id ON ui_events(session_id)
idx_ui_events_frame_id|ui_events|CREATE INDEX idx_ui_events_frame_id ON ui_events(frame_id)
idx_ui_events_sync_id|ui_events|CREATE INDEX idx_ui_events_sync_id ON ui_events(sync_id)
idx_ui_events_synced_at|ui_events|CREATE INDEX idx_ui_events_synced_at ON ui_events(synced_at)
idx_ui_events_unsynced|ui_events|CREATE INDEX idx_ui_events_unsynced ON ui_events(synced_at) WHERE synced_at IS NULL
idx_video_chunks_device_name|video_chunks|CREATE INDEX idx_video_chunks_device_name ON video_chunks(device_name)
idx_video_chunks_device_name_id|video_chunks|CREATE INDEX idx_video_chunks_device_name_id ON video_chunks(device_name, id DESC)
idx_video_chunks_cloud_blob_id|video_chunks|CREATE INDEX idx_video_chunks_cloud_blob_id
ON video_chunks(cloud_blob_id) WHERE cloud_blob_id IS NULL
idx_vision_tags_vision_id|vision_tags|CREATE INDEX idx_vision_tags_vision_id ON vision_tags(vision_id)
idx_vision_tags_tag_id|vision_tags|CREATE INDEX idx_vision_tags_tag_id ON vision_tags(tag_id)
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT
'elements_fts' as name, COUNT(*) as rows FROM elements_fts
UNION ALL SELECT 'frames_fts', COUNT(*) FROM frames_fts
UNION ALL SELECT 'ui_events_fts', COUNT(*) FROM ui_events_fts
UNION ALL SELECT 'audio_transcriptions_fts', COUNT(*) FROM audio_transcriptions_fts;"
elements_fts|2595462
frames_fts|40394
ui_events_fts|51394
audio_transcriptions_fts|3
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT name, SUM(payload) as bytes
FROM dbstat
WHERE name IN ('elements_fts_data','frames_fts_data','ui_events_fts_data')
GROUP BY name;"
elements_fts_data|49417125
frames_fts_data|46211048
ui_events_fts_data|1661147
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT name, SUM(payload) as bytes
FROM dbstat
WHERE name IN ('frames', 'ui_events', 'elements', 'elements_fts_data','frames_fts_data','ui_events_fts_data')
GROUP BY name;"
elements|334884969
elements_fts_data|49472096
frames|689381789
frames_fts_data|46270876
ui_events|8354906
ui_events_fts_data|1663427
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT sql FROM sqlite_master WHERE type='table' AND name IN ('elements_fts','frames_fts','ui_events_fts','memories_fts') ORDER BY name;"
CREATE VIRTUAL TABLE elements_fts USING fts5(
text,
role,
frame_id UNINDEXED,
content='elements',
content_rowid='id',
tokenize='unicode61'
)
CREATE VIRTUAL TABLE frames_fts USING fts5(
full_text,
app_name,
window_name,
browser_url,
UW PICO 5.09 New Buffer
[ Read 1 line ]
^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos
^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell
id UNINDEXED,
tokenize='unicode61'
UW PICO 5.09 New Buffer
[ Read 1 line ]
^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos
^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell
)
UW PICO 5.09 New Buffer
[ Read 25 lines ]
^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos
^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell
CREATE VIRTUAL TABLE memories_fts USING fts5(
content,
tags,
content='memories',
content_rowid='id',
tokenize='unicode61'
)
CREATE VIRTUAL TABLE ui_events_fts USING fts5(
text_content,
app_name,
window_title,
element_name,
content='ui_events',
content_rowid='id',
tokenize='unicode61'
)
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ls
config.json db.sqlite-shm screenpipe.2026-04-09.0.log screenpipe.2026-04-13.0.log screenpipe.2026-04-16.0.log
data db.sqlite-wal screenpipe.2026-04-11.0.log screenpipe.2026-04-14.0.log
db.sqlite pipes screenpipe.2026-04-12.0.log screenpipe.2026-04-15.0.log
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ touch screenpipe_sync.sh
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ll
total 5632584
drwxr-xr-x 17 lukas staff 544 16 Apr 19:19 .
UW PICO 5.09 New Buffer
[ Read 25 lines ]
^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos
^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell
UW PICO 5.09 File: screenpipe_sync.sh
# Check NAS mount
if [ ! -d "/Volumes/Test/screenpipe" ]; then
echo "ERROR: NAS not mounted"
else
echo "OK: NAS mounted"
fi
# Check source DB
DB_SRC="$HOME/.screenpipe/db.sqlite"
if [ ! -f "$DB_SRC" ]; then
echo "ERROR: Source DB not found"
else
echo "OK: Source DB exists"
du -sh "$DB_SRC"
fi
# Check NAS DB (may not exist yet on first run - that's fine)
NAS_DB="/Volumes/Test/screenpipe/archive.db"
if [ ! -f "$NAS_DB" ]; then
echo "INFO: archive.db does not exist yet - will be created on first sync"
else
echo "OK: archive.db exists"
du -sh "$NAS_DB"
sqlite3 "$NAS_DB" "SELECT COUNT(*) || ' tables' FROM sqlite_master WHERE type='table';"
fi
^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos
^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
screenpipe"
Close Tab
nano
Close Tab
✳ Review screenpipe usage and Boosteroid integration (node)
Close Tab
⌥⌘1
nano...
|
NULL
|
|
40571
|
NULL
|
0
|
2026-04-16T16:28:55.965531+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-16/1776 /Users/lukas/.screenpipe/data/data/2026-04-16/1776356935965_m2.jpg...
|
iTerm2
|
nano
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
idx_elements_source_role_text|elements|CREATE INDE idx_elements_source_role_text|elements|CREATE INDEX idx_elements_source_role_text
ON elements(source, role, frame_id)
WHERE text IS NOT NULL
idx_elements_frame_source_role|elements|CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL
idx_frames_timestamp|frames|CREATE INDEX idx_frames_timestamp ON frames(timestamp)
idx_frames_video_chunk_id|frames|CREATE INDEX idx_frames_video_chunk_id ON frames(video_chunk_id)
idx_frames_timestamp_device|frames|CREATE INDEX idx_frames_timestamp_device
ON frames(timestamp, device_name)
idx_frames_snapshot_path|frames|CREATE INDEX idx_frames_snapshot_path
ON frames(snapshot_path) WHERE snapshot_path IS NOT NULL
idx_frames_cloud_blob_id|frames|CREATE INDEX idx_frames_cloud_blob_id
ON frames(cloud_blob_id) WHERE cloud_blob_id IS NULL AND snapshot_path IS NOT NULL
idx_frames_sync_id|frames|CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL
idx_frames_elements_ref_frame_id|frames|CREATE INDEX idx_frames_elements_ref_frame_id
ON frames(elements_ref_frame_id)
WHERE elements_ref_frame_id IS NOT NULL
idx_meetings_start|meetings|CREATE INDEX idx_meetings_start ON meetings(meeting_start)
idx_meetings_end|meetings|CREATE INDEX idx_meetings_end ON meetings(meeting_end)
idx_memories_created_at|memories|CREATE INDEX idx_memories_created_at ON memories(created_at)
idx_memories_importance|memories|CREATE INDEX idx_memories_importance ON memories(importance DESC)
idx_memories_source|memories|CREATE INDEX idx_memories_source ON memories(source)
idx_memories_frame_id|memories|CREATE INDEX idx_memories_frame_id ON memories(frame_id)
idx_ocr_text_frame_id|ocr_text|CREATE INDEX idx_ocr_text_frame_id ON ocr_text(frame_id)
idx_ocr_text_frame_app_window|ocr_text|CREATE INDEX idx_ocr_text_frame_app_window ON ocr_text(frame_id, app_name, window_name)
idx_ocr_text_length|ocr_text|CREATE INDEX idx_ocr_text_length ON ocr_text (text_length)
idx_ocr_text_sync_id|ocr_text|CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL
idx_pipe_exec_name_status|pipe_executions|CREATE INDEX idx_pipe_exec_name_status ON pipe_executions(pipe_name, status)
idx_pipe_exec_running|pipe_executions|CREATE INDEX idx_pipe_exec_running ON pipe_executions(status) WHERE status = 'running'
idx_pipe_exec_name_time|pipe_executions|CREATE INDEX idx_pipe_exec_name_time ON pipe_executions(pipe_name, id DESC)
idx_ui_events_timestamp|ui_events|CREATE INDEX idx_ui_events_timestamp ON ui_events(timestamp)
idx_ui_events_event_type|ui_events|CREATE INDEX idx_ui_events_event_type ON ui_events(event_type)
idx_ui_events_app_name|ui_events|CREATE INDEX idx_ui_events_app_name ON ui_events(app_name)
idx_ui_events_session_id|ui_events|CREATE INDEX idx_ui_events_session_id ON ui_events(session_id)
idx_ui_events_frame_id|ui_events|CREATE INDEX idx_ui_events_frame_id ON ui_events(frame_id)
idx_ui_events_sync_id|ui_events|CREATE INDEX idx_ui_events_sync_id ON ui_events(sync_id)
idx_ui_events_synced_at|ui_events|CREATE INDEX idx_ui_events_synced_at ON ui_events(synced_at)
idx_ui_events_unsynced|ui_events|CREATE INDEX idx_ui_events_unsynced ON ui_events(synced_at) WHERE synced_at IS NULL
idx_video_chunks_device_name|video_chunks|CREATE INDEX idx_video_chunks_device_name ON video_chunks(device_name)
idx_video_chunks_device_name_id|video_chunks|CREATE INDEX idx_video_chunks_device_name_id ON video_chunks(device_name, id DESC)
idx_video_chunks_cloud_blob_id|video_chunks|CREATE INDEX idx_video_chunks_cloud_blob_id
ON video_chunks(cloud_blob_id) WHERE cloud_blob_id IS NULL
idx_vision_tags_vision_id|vision_tags|CREATE INDEX idx_vision_tags_vision_id ON vision_tags(vision_id)
idx_vision_tags_tag_id|vision_tags|CREATE INDEX idx_vision_tags_tag_id ON vision_tags(tag_id)
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT
'elements_fts' as name, COUNT(*) as rows FROM elements_fts
UNION ALL SELECT 'frames_fts', COUNT(*) FROM frames_fts
UNION ALL SELECT 'ui_events_fts', COUNT(*) FROM ui_events_fts
UNION ALL SELECT 'audio_transcriptions_fts', COUNT(*) FROM audio_transcriptions_fts;"
elements_fts|2595462
frames_fts|40394
ui_events_fts|51394
audio_transcriptions_fts|3
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT name, SUM(payload) as bytes
FROM dbstat
WHERE name IN ('elements_fts_data','frames_fts_data','ui_events_fts_data')
GROUP BY name;"
elements_fts_data|49417125
frames_fts_data|46211048
ui_events_fts_data|1661147
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT name, SUM(payload) as bytes
FROM dbstat
WHERE name IN ('frames', 'ui_events', 'elements', 'elements_fts_data','frames_fts_data','ui_events_fts_data')
GROUP BY name;"
elements|334884969
elements_fts_data|49472096
frames|689381789
frames_fts_data|46270876
ui_events|8354906
ui_events_fts_data|1663427
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT sql FROM sqlite_master WHERE type='table' AND name IN ('elements_fts','frames_fts','ui_events_fts','memories_fts') ORDER BY name;"
CREATE VIRTUAL TABLE elements_fts USING fts5(
text,
role,
frame_id UNINDEXED,
content='elements',
content_rowid='id',
tokenize='unicode61'
)
CREATE VIRTUAL TABLE frames_fts USING fts5(
full_text,
app_name,
window_name,
browser_url,
UW PICO 5.09 New Buffer
[ Read 1 line ]
^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos
^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell
id UNINDEXED,
tokenize='unicode61'
UW PICO 5.09 New Buffer
[ Read 1 line ]
^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos
^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell
)
UW PICO 5.09 New Buffer
[ Read 25 lines ]
^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos
^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell
CREATE VIRTUAL TABLE memories_fts USING fts5(
content,
tags,
content='memories',
content_rowid='id',
tokenize='unicode61'
)
CREATE VIRTUAL TABLE ui_events_fts USING fts5(
text_content,
app_name,
window_title,
element_name,
content='ui_events',
content_rowid='id',
tokenize='unicode61'
)
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ls
config.json db.sqlite-shm screenpipe.2026-04-09.0.log screenpipe.2026-04-13.0.log screenpipe.2026-04-16.0.log
data db.sqlite-wal screenpipe.2026-04-11.0.log screenpipe.2026-04-14.0.log
db.sqlite pipes screenpipe.2026-04-12.0.log screenpipe.2026-04-15.0.log
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ touch screenpipe_sync.sh
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ll
total 5632584
drwxr-xr-x 17 lukas staff 544 16 Apr 19:19 .
UW PICO 5.09 New Buffer
[ Read 25 lines ]
^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos
^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell
UW PICO 5.09 File: screenpipe_sync.sh
# Check NAS mount
if [ ! -d "/Volumes/Test/screenpipe" ]; then
echo "ERROR: NAS not mounted"
else
echo "OK: NAS mounted"
fi
# Check source DB
DB_SRC="$HOME/.screenpipe/db.sqlite"
if [ ! -f "$DB_SRC" ]; then
echo "ERROR: Source DB not found"
else
echo "OK: Source DB exists"
du -sh "$DB_SRC"
fi
# Check NAS DB (may not exist yet on first run - that's fine)
NAS_DB="/Volumes/Test/screenpipe/archive.db"
if [ ! -f "$NAS_DB" ]; then
echo "INFO: archive.db does not exist yet - will be created on first sync"
else
echo "OK: archive.db exists"
du -sh "$NAS_DB"
sqlite3 "$NAS_DB" "SELECT COUNT(*) || ' tables' FROM sqlite_master WHERE type='table';"
fi
^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos
^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
screenpipe"
Close Tab
nano
Close Tab
✳ Review screenpipe usage and Boosteroid integration (node)
Close Tab
⌥⌘1
nano...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"idx_elements_source_role_text|elements|CREATE INDEX idx_elements_source_role_text\n ON elements(source, role, frame_id)\n WHERE text IS NOT NULL\nidx_elements_frame_source_role|elements|CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL\nidx_frames_timestamp|frames|CREATE INDEX idx_frames_timestamp ON frames(timestamp)\nidx_frames_video_chunk_id|frames|CREATE INDEX idx_frames_video_chunk_id ON frames(video_chunk_id)\nidx_frames_timestamp_device|frames|CREATE INDEX idx_frames_timestamp_device\n ON frames(timestamp, device_name)\nidx_frames_snapshot_path|frames|CREATE INDEX idx_frames_snapshot_path\n ON frames(snapshot_path) WHERE snapshot_path IS NOT NULL\nidx_frames_cloud_blob_id|frames|CREATE INDEX idx_frames_cloud_blob_id\n ON frames(cloud_blob_id) WHERE cloud_blob_id IS NULL AND snapshot_path IS NOT NULL\nidx_frames_sync_id|frames|CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL\nidx_frames_elements_ref_frame_id|frames|CREATE INDEX idx_frames_elements_ref_frame_id\n ON frames(elements_ref_frame_id)\n WHERE elements_ref_frame_id IS NOT NULL\nidx_meetings_start|meetings|CREATE INDEX idx_meetings_start ON meetings(meeting_start)\nidx_meetings_end|meetings|CREATE INDEX idx_meetings_end ON meetings(meeting_end)\nidx_memories_created_at|memories|CREATE INDEX idx_memories_created_at ON memories(created_at)\nidx_memories_importance|memories|CREATE INDEX idx_memories_importance ON memories(importance DESC)\nidx_memories_source|memories|CREATE INDEX idx_memories_source ON memories(source)\nidx_memories_frame_id|memories|CREATE INDEX idx_memories_frame_id ON memories(frame_id)\nidx_ocr_text_frame_id|ocr_text|CREATE INDEX idx_ocr_text_frame_id ON ocr_text(frame_id)\nidx_ocr_text_frame_app_window|ocr_text|CREATE INDEX idx_ocr_text_frame_app_window ON ocr_text(frame_id, app_name, window_name)\nidx_ocr_text_length|ocr_text|CREATE INDEX idx_ocr_text_length ON ocr_text (text_length)\nidx_ocr_text_sync_id|ocr_text|CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL\nidx_pipe_exec_name_status|pipe_executions|CREATE INDEX idx_pipe_exec_name_status ON pipe_executions(pipe_name, status)\nidx_pipe_exec_running|pipe_executions|CREATE INDEX idx_pipe_exec_running ON pipe_executions(status) WHERE status = 'running'\nidx_pipe_exec_name_time|pipe_executions|CREATE INDEX idx_pipe_exec_name_time ON pipe_executions(pipe_name, id DESC)\nidx_ui_events_timestamp|ui_events|CREATE INDEX idx_ui_events_timestamp ON ui_events(timestamp)\nidx_ui_events_event_type|ui_events|CREATE INDEX idx_ui_events_event_type ON ui_events(event_type)\nidx_ui_events_app_name|ui_events|CREATE INDEX idx_ui_events_app_name ON ui_events(app_name)\nidx_ui_events_session_id|ui_events|CREATE INDEX idx_ui_events_session_id ON ui_events(session_id)\nidx_ui_events_frame_id|ui_events|CREATE INDEX idx_ui_events_frame_id ON ui_events(frame_id)\nidx_ui_events_sync_id|ui_events|CREATE INDEX idx_ui_events_sync_id ON ui_events(sync_id)\nidx_ui_events_synced_at|ui_events|CREATE INDEX idx_ui_events_synced_at ON ui_events(synced_at)\nidx_ui_events_unsynced|ui_events|CREATE INDEX idx_ui_events_unsynced ON ui_events(synced_at) WHERE synced_at IS NULL\nidx_video_chunks_device_name|video_chunks|CREATE INDEX idx_video_chunks_device_name ON video_chunks(device_name)\nidx_video_chunks_device_name_id|video_chunks|CREATE INDEX idx_video_chunks_device_name_id ON video_chunks(device_name, id DESC)\nidx_video_chunks_cloud_blob_id|video_chunks|CREATE INDEX idx_video_chunks_cloud_blob_id\n ON video_chunks(cloud_blob_id) WHERE cloud_blob_id IS NULL\nidx_vision_tags_vision_id|vision_tags|CREATE INDEX idx_vision_tags_vision_id ON vision_tags(vision_id)\nidx_vision_tags_tag_id|vision_tags|CREATE INDEX idx_vision_tags_tag_id ON vision_tags(tag_id)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT\n 'elements_fts' as name, COUNT(*) as rows FROM elements_fts\nUNION ALL SELECT 'frames_fts', COUNT(*) FROM frames_fts\nUNION ALL SELECT 'ui_events_fts', COUNT(*) FROM ui_events_fts\nUNION ALL SELECT 'audio_transcriptions_fts', COUNT(*) FROM audio_transcriptions_fts;\"\nelements_fts|2595462\nframes_fts|40394\nui_events_fts|51394\naudio_transcriptions_fts|3\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT name, SUM(payload) as bytes\nFROM dbstat\nWHERE name IN ('elements_fts_data','frames_fts_data','ui_events_fts_data')\nGROUP BY name;\"\nelements_fts_data|49417125\nframes_fts_data|46211048\nui_events_fts_data|1661147\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT name, SUM(payload) as bytes\nFROM dbstat\nWHERE name IN ('frames', 'ui_events', 'elements', 'elements_fts_data','frames_fts_data','ui_events_fts_data')\nGROUP BY name;\"\nelements|334884969\nelements_fts_data|49472096\nframes|689381789\nframes_fts_data|46270876\nui_events|8354906\nui_events_fts_data|1663427\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"SELECT sql FROM sqlite_master WHERE type='table' AND name IN ('elements_fts','frames_fts','ui_events_fts','memories_fts') ORDER BY name;\"\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)\nCREATE VIRTUAL TABLE frames_fts USING fts5(\n full_text,\n app_name,\n window_name,\n browser_url,\n UW PICO 5.09 New Buffer \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n [ Read 1 line ] \n^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos \n^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell \n id UNINDEXED,\n tokenize='unicode61'\n UW PICO 5.09 New Buffer \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n [ Read 1 line ] \n^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos \n^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell \n)\n UW PICO 5.09 New Buffer \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n [ Read 25 lines ] \n^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos \n^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell \nCREATE VIRTUAL TABLE memories_fts USING fts5(\n content,\n tags,\n content='memories',\n content_rowid='id',\n tokenize='unicode61'\n)\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)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ls\nconfig.json\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tdb.sqlite-shm\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-09.0.log\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-13.0.log\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-16.0.log\ndata\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tdb.sqlite-wal\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-11.0.log\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-14.0.log\ndb.sqlite\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tpipes\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-12.0.log\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-15.0.log\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ touch screenpipe_sync.sh\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ll\ntotal 5632584\ndrwxr-xr-x 17 lukas staff 544 16 Apr 19:19 .\n UW PICO 5.09 New Buffer \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n [ Read 25 lines ] \n^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos \n^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell \n UW PICO 5.09 File: screenpipe_sync.sh \n\n# Check NAS mount\nif [ ! -d \"/Volumes/Test/screenpipe\" ]; then\n\u0000\u0000echo \"ERROR: NAS not mounted\"\nelse\n\u0000\u0000echo \"OK: NAS mounted\"\nfi\n\n# Check source DB\nDB_SRC=\"$HOME/.screenpipe/db.sqlite\"\nif [ ! -f \"$DB_SRC\" ]; then\n\u0000\u0000echo \"ERROR: Source DB not found\"\nelse\n\u0000\u0000echo \"OK: Source DB exists\"\n\u0000\u0000du -sh \"$DB_SRC\"\nfi\n\n# Check NAS DB (may not exist yet on first run - that's fine)\nNAS_DB=\"/Volumes/Test/screenpipe/archive.db\"\nif [ ! -f \"$NAS_DB\" ]; then\n\u0000\u0000echo \"INFO: archive.db does not exist yet - will be created on first sync\"\nelse\n\u0000\u0000echo \"OK: archive.db exists\"\n\u0000\u0000du -sh \"$NAS_DB\"\n\u0000\u0000sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) || ' tables' FROM sqlite_master WHERE type='table';\"\nfi\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos \n^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell","depth":4,"value":"idx_elements_source_role_text|elements|CREATE INDEX idx_elements_source_role_text\n ON elements(source, role, frame_id)\n WHERE text IS NOT NULL\nidx_elements_frame_source_role|elements|CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL\nidx_frames_timestamp|frames|CREATE INDEX idx_frames_timestamp ON frames(timestamp)\nidx_frames_video_chunk_id|frames|CREATE INDEX idx_frames_video_chunk_id ON frames(video_chunk_id)\nidx_frames_timestamp_device|frames|CREATE INDEX idx_frames_timestamp_device\n ON frames(timestamp, device_name)\nidx_frames_snapshot_path|frames|CREATE INDEX idx_frames_snapshot_path\n ON frames(snapshot_path) WHERE snapshot_path IS NOT NULL\nidx_frames_cloud_blob_id|frames|CREATE INDEX idx_frames_cloud_blob_id\n ON frames(cloud_blob_id) WHERE cloud_blob_id IS NULL AND snapshot_path IS NOT NULL\nidx_frames_sync_id|frames|CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL\nidx_frames_elements_ref_frame_id|frames|CREATE INDEX idx_frames_elements_ref_frame_id\n ON frames(elements_ref_frame_id)\n WHERE elements_ref_frame_id IS NOT NULL\nidx_meetings_start|meetings|CREATE INDEX idx_meetings_start ON meetings(meeting_start)\nidx_meetings_end|meetings|CREATE INDEX idx_meetings_end ON meetings(meeting_end)\nidx_memories_created_at|memories|CREATE INDEX idx_memories_created_at ON memories(created_at)\nidx_memories_importance|memories|CREATE INDEX idx_memories_importance ON memories(importance DESC)\nidx_memories_source|memories|CREATE INDEX idx_memories_source ON memories(source)\nidx_memories_frame_id|memories|CREATE INDEX idx_memories_frame_id ON memories(frame_id)\nidx_ocr_text_frame_id|ocr_text|CREATE INDEX idx_ocr_text_frame_id ON ocr_text(frame_id)\nidx_ocr_text_frame_app_window|ocr_text|CREATE INDEX idx_ocr_text_frame_app_window ON ocr_text(frame_id, app_name, window_name)\nidx_ocr_text_length|ocr_text|CREATE INDEX idx_ocr_text_length ON ocr_text (text_length)\nidx_ocr_text_sync_id|ocr_text|CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL\nidx_pipe_exec_name_status|pipe_executions|CREATE INDEX idx_pipe_exec_name_status ON pipe_executions(pipe_name, status)\nidx_pipe_exec_running|pipe_executions|CREATE INDEX idx_pipe_exec_running ON pipe_executions(status) WHERE status = 'running'\nidx_pipe_exec_name_time|pipe_executions|CREATE INDEX idx_pipe_exec_name_time ON pipe_executions(pipe_name, id DESC)\nidx_ui_events_timestamp|ui_events|CREATE INDEX idx_ui_events_timestamp ON ui_events(timestamp)\nidx_ui_events_event_type|ui_events|CREATE INDEX idx_ui_events_event_type ON ui_events(event_type)\nidx_ui_events_app_name|ui_events|CREATE INDEX idx_ui_events_app_name ON ui_events(app_name)\nidx_ui_events_session_id|ui_events|CREATE INDEX idx_ui_events_session_id ON ui_events(session_id)\nidx_ui_events_frame_id|ui_events|CREATE INDEX idx_ui_events_frame_id ON ui_events(frame_id)\nidx_ui_events_sync_id|ui_events|CREATE INDEX idx_ui_events_sync_id ON ui_events(sync_id)\nidx_ui_events_synced_at|ui_events|CREATE INDEX idx_ui_events_synced_at ON ui_events(synced_at)\nidx_ui_events_unsynced|ui_events|CREATE INDEX idx_ui_events_unsynced ON ui_events(synced_at) WHERE synced_at IS NULL\nidx_video_chunks_device_name|video_chunks|CREATE INDEX idx_video_chunks_device_name ON video_chunks(device_name)\nidx_video_chunks_device_name_id|video_chunks|CREATE INDEX idx_video_chunks_device_name_id ON video_chunks(device_name, id DESC)\nidx_video_chunks_cloud_blob_id|video_chunks|CREATE INDEX idx_video_chunks_cloud_blob_id\n ON video_chunks(cloud_blob_id) WHERE cloud_blob_id IS NULL\nidx_vision_tags_vision_id|vision_tags|CREATE INDEX idx_vision_tags_vision_id ON vision_tags(vision_id)\nidx_vision_tags_tag_id|vision_tags|CREATE INDEX idx_vision_tags_tag_id ON vision_tags(tag_id)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT\n 'elements_fts' as name, COUNT(*) as rows FROM elements_fts\nUNION ALL SELECT 'frames_fts', COUNT(*) FROM frames_fts\nUNION ALL SELECT 'ui_events_fts', COUNT(*) FROM ui_events_fts\nUNION ALL SELECT 'audio_transcriptions_fts', COUNT(*) FROM audio_transcriptions_fts;\"\nelements_fts|2595462\nframes_fts|40394\nui_events_fts|51394\naudio_transcriptions_fts|3\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT name, SUM(payload) as bytes\nFROM dbstat\nWHERE name IN ('elements_fts_data','frames_fts_data','ui_events_fts_data')\nGROUP BY name;\"\nelements_fts_data|49417125\nframes_fts_data|46211048\nui_events_fts_data|1661147\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT name, SUM(payload) as bytes\nFROM dbstat\nWHERE name IN ('frames', 'ui_events', 'elements', 'elements_fts_data','frames_fts_data','ui_events_fts_data')\nGROUP BY name;\"\nelements|334884969\nelements_fts_data|49472096\nframes|689381789\nframes_fts_data|46270876\nui_events|8354906\nui_events_fts_data|1663427\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"SELECT sql FROM sqlite_master WHERE type='table' AND name IN ('elements_fts','frames_fts','ui_events_fts','memories_fts') ORDER BY name;\"\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)\nCREATE VIRTUAL TABLE frames_fts USING fts5(\n full_text,\n app_name,\n window_name,\n browser_url,\n UW PICO 5.09 New Buffer \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n [ Read 1 line ] \n^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos \n^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell \n id UNINDEXED,\n tokenize='unicode61'\n UW PICO 5.09 New Buffer \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n [ Read 1 line ] \n^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos \n^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell \n)\n UW PICO 5.09 New Buffer \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n [ Read 25 lines ] \n^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos \n^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell \nCREATE VIRTUAL TABLE memories_fts USING fts5(\n content,\n tags,\n content='memories',\n content_rowid='id',\n tokenize='unicode61'\n)\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)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ls\nconfig.json\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tdb.sqlite-shm\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-09.0.log\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-13.0.log\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-16.0.log\ndata\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tdb.sqlite-wal\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-11.0.log\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-14.0.log\ndb.sqlite\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tpipes\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-12.0.log\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-15.0.log\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ touch screenpipe_sync.sh\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ll\ntotal 5632584\ndrwxr-xr-x 17 lukas staff 544 16 Apr 19:19 .\n UW PICO 5.09 New Buffer \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n [ Read 25 lines ] \n^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos \n^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell \n UW PICO 5.09 File: screenpipe_sync.sh \n\n# Check NAS mount\nif [ ! -d \"/Volumes/Test/screenpipe\" ]; then\n\u0000\u0000echo \"ERROR: NAS not mounted\"\nelse\n\u0000\u0000echo \"OK: NAS mounted\"\nfi\n\n# Check source DB\nDB_SRC=\"$HOME/.screenpipe/db.sqlite\"\nif [ ! -f \"$DB_SRC\" ]; then\n\u0000\u0000echo \"ERROR: Source DB not found\"\nelse\n\u0000\u0000echo \"OK: Source DB exists\"\n\u0000\u0000du -sh \"$DB_SRC\"\nfi\n\n# Check NAS DB (may not exist yet on first run - that's fine)\nNAS_DB=\"/Volumes/Test/screenpipe/archive.db\"\nif [ ! -f \"$NAS_DB\" ]; then\n\u0000\u0000echo \"INFO: archive.db does not exist yet - will be created on first sync\"\nelse\n\u0000\u0000echo \"OK: archive.db exists\"\n\u0000\u0000du -sh \"$NAS_DB\"\n\u0000\u0000sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) || ' tables' FROM sqlite_master WHERE type='table';\"\nfi\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos \n^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.23320313,"top":1.0,"width":0.0921875,"height":-0.03680551},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.23554687,"top":1.0,"width":0.00625,"height":-0.039583325},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.32539064,"top":1.0,"width":0.0921875,"height":-0.03680551},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.32773438,"top":1.0,"width":0.00625,"height":-0.039583325},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.41757813,"top":1.0,"width":0.0921875,"height":-0.03680551},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.41992188,"top":1.0,"width":0.00625,"height":-0.039583325},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.5097656,"top":1.0,"width":0.0921875,"height":-0.03680551},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.5121094,"top":1.0,"width":0.00625,"height":-0.039583325},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"nano","depth":2,"bounds":{"left":0.60195315,"top":1.0,"width":0.0921875,"height":-0.03680551},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.60429686,"top":1.0,"width":0.00625,"height":-0.039583325},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"✳ Review screenpipe usage and Boosteroid integration (node)","depth":2,"bounds":{"left":0.6941406,"top":1.0,"width":0.0921875,"height":-0.03680551},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.6964844,"top":1.0,"width":0.00625,"height":-0.039583325},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.7703125,"top":1.0,"width":0.021875,"height":-0.02013886},"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"nano","depth":1,"bounds":{"left":0.50742185,"top":1.0,"width":0.0140625,"height":-0.020833373},"role_description":"text"}]...
|
8021106716519421575
|
-3429880746629370976
|
idle
|
accessibility
|
NULL
|
idx_elements_source_role_text|elements|CREATE INDE idx_elements_source_role_text|elements|CREATE INDEX idx_elements_source_role_text
ON elements(source, role, frame_id)
WHERE text IS NOT NULL
idx_elements_frame_source_role|elements|CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL
idx_frames_timestamp|frames|CREATE INDEX idx_frames_timestamp ON frames(timestamp)
idx_frames_video_chunk_id|frames|CREATE INDEX idx_frames_video_chunk_id ON frames(video_chunk_id)
idx_frames_timestamp_device|frames|CREATE INDEX idx_frames_timestamp_device
ON frames(timestamp, device_name)
idx_frames_snapshot_path|frames|CREATE INDEX idx_frames_snapshot_path
ON frames(snapshot_path) WHERE snapshot_path IS NOT NULL
idx_frames_cloud_blob_id|frames|CREATE INDEX idx_frames_cloud_blob_id
ON frames(cloud_blob_id) WHERE cloud_blob_id IS NULL AND snapshot_path IS NOT NULL
idx_frames_sync_id|frames|CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL
idx_frames_elements_ref_frame_id|frames|CREATE INDEX idx_frames_elements_ref_frame_id
ON frames(elements_ref_frame_id)
WHERE elements_ref_frame_id IS NOT NULL
idx_meetings_start|meetings|CREATE INDEX idx_meetings_start ON meetings(meeting_start)
idx_meetings_end|meetings|CREATE INDEX idx_meetings_end ON meetings(meeting_end)
idx_memories_created_at|memories|CREATE INDEX idx_memories_created_at ON memories(created_at)
idx_memories_importance|memories|CREATE INDEX idx_memories_importance ON memories(importance DESC)
idx_memories_source|memories|CREATE INDEX idx_memories_source ON memories(source)
idx_memories_frame_id|memories|CREATE INDEX idx_memories_frame_id ON memories(frame_id)
idx_ocr_text_frame_id|ocr_text|CREATE INDEX idx_ocr_text_frame_id ON ocr_text(frame_id)
idx_ocr_text_frame_app_window|ocr_text|CREATE INDEX idx_ocr_text_frame_app_window ON ocr_text(frame_id, app_name, window_name)
idx_ocr_text_length|ocr_text|CREATE INDEX idx_ocr_text_length ON ocr_text (text_length)
idx_ocr_text_sync_id|ocr_text|CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL
idx_pipe_exec_name_status|pipe_executions|CREATE INDEX idx_pipe_exec_name_status ON pipe_executions(pipe_name, status)
idx_pipe_exec_running|pipe_executions|CREATE INDEX idx_pipe_exec_running ON pipe_executions(status) WHERE status = 'running'
idx_pipe_exec_name_time|pipe_executions|CREATE INDEX idx_pipe_exec_name_time ON pipe_executions(pipe_name, id DESC)
idx_ui_events_timestamp|ui_events|CREATE INDEX idx_ui_events_timestamp ON ui_events(timestamp)
idx_ui_events_event_type|ui_events|CREATE INDEX idx_ui_events_event_type ON ui_events(event_type)
idx_ui_events_app_name|ui_events|CREATE INDEX idx_ui_events_app_name ON ui_events(app_name)
idx_ui_events_session_id|ui_events|CREATE INDEX idx_ui_events_session_id ON ui_events(session_id)
idx_ui_events_frame_id|ui_events|CREATE INDEX idx_ui_events_frame_id ON ui_events(frame_id)
idx_ui_events_sync_id|ui_events|CREATE INDEX idx_ui_events_sync_id ON ui_events(sync_id)
idx_ui_events_synced_at|ui_events|CREATE INDEX idx_ui_events_synced_at ON ui_events(synced_at)
idx_ui_events_unsynced|ui_events|CREATE INDEX idx_ui_events_unsynced ON ui_events(synced_at) WHERE synced_at IS NULL
idx_video_chunks_device_name|video_chunks|CREATE INDEX idx_video_chunks_device_name ON video_chunks(device_name)
idx_video_chunks_device_name_id|video_chunks|CREATE INDEX idx_video_chunks_device_name_id ON video_chunks(device_name, id DESC)
idx_video_chunks_cloud_blob_id|video_chunks|CREATE INDEX idx_video_chunks_cloud_blob_id
ON video_chunks(cloud_blob_id) WHERE cloud_blob_id IS NULL
idx_vision_tags_vision_id|vision_tags|CREATE INDEX idx_vision_tags_vision_id ON vision_tags(vision_id)
idx_vision_tags_tag_id|vision_tags|CREATE INDEX idx_vision_tags_tag_id ON vision_tags(tag_id)
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT
'elements_fts' as name, COUNT(*) as rows FROM elements_fts
UNION ALL SELECT 'frames_fts', COUNT(*) FROM frames_fts
UNION ALL SELECT 'ui_events_fts', COUNT(*) FROM ui_events_fts
UNION ALL SELECT 'audio_transcriptions_fts', COUNT(*) FROM audio_transcriptions_fts;"
elements_fts|2595462
frames_fts|40394
ui_events_fts|51394
audio_transcriptions_fts|3
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT name, SUM(payload) as bytes
FROM dbstat
WHERE name IN ('elements_fts_data','frames_fts_data','ui_events_fts_data')
GROUP BY name;"
elements_fts_data|49417125
frames_fts_data|46211048
ui_events_fts_data|1661147
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT name, SUM(payload) as bytes
FROM dbstat
WHERE name IN ('frames', 'ui_events', 'elements', 'elements_fts_data','frames_fts_data','ui_events_fts_data')
GROUP BY name;"
elements|334884969
elements_fts_data|49472096
frames|689381789
frames_fts_data|46270876
ui_events|8354906
ui_events_fts_data|1663427
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT sql FROM sqlite_master WHERE type='table' AND name IN ('elements_fts','frames_fts','ui_events_fts','memories_fts') ORDER BY name;"
CREATE VIRTUAL TABLE elements_fts USING fts5(
text,
role,
frame_id UNINDEXED,
content='elements',
content_rowid='id',
tokenize='unicode61'
)
CREATE VIRTUAL TABLE frames_fts USING fts5(
full_text,
app_name,
window_name,
browser_url,
UW PICO 5.09 New Buffer
[ Read 1 line ]
^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos
^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell
id UNINDEXED,
tokenize='unicode61'
UW PICO 5.09 New Buffer
[ Read 1 line ]
^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos
^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell
)
UW PICO 5.09 New Buffer
[ Read 25 lines ]
^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos
^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell
CREATE VIRTUAL TABLE memories_fts USING fts5(
content,
tags,
content='memories',
content_rowid='id',
tokenize='unicode61'
)
CREATE VIRTUAL TABLE ui_events_fts USING fts5(
text_content,
app_name,
window_title,
element_name,
content='ui_events',
content_rowid='id',
tokenize='unicode61'
)
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ls
config.json db.sqlite-shm screenpipe.2026-04-09.0.log screenpipe.2026-04-13.0.log screenpipe.2026-04-16.0.log
data db.sqlite-wal screenpipe.2026-04-11.0.log screenpipe.2026-04-14.0.log
db.sqlite pipes screenpipe.2026-04-12.0.log screenpipe.2026-04-15.0.log
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ touch screenpipe_sync.sh
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ll
total 5632584
drwxr-xr-x 17 lukas staff 544 16 Apr 19:19 .
UW PICO 5.09 New Buffer
[ Read 25 lines ]
^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos
^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell
UW PICO 5.09 File: screenpipe_sync.sh
# Check NAS mount
if [ ! -d "/Volumes/Test/screenpipe" ]; then
echo "ERROR: NAS not mounted"
else
echo "OK: NAS mounted"
fi
# Check source DB
DB_SRC="$HOME/.screenpipe/db.sqlite"
if [ ! -f "$DB_SRC" ]; then
echo "ERROR: Source DB not found"
else
echo "OK: Source DB exists"
du -sh "$DB_SRC"
fi
# Check NAS DB (may not exist yet on first run - that's fine)
NAS_DB="/Volumes/Test/screenpipe/archive.db"
if [ ! -f "$NAS_DB" ]; then
echo "INFO: archive.db does not exist yet - will be created on first sync"
else
echo "OK: archive.db exists"
du -sh "$NAS_DB"
sqlite3 "$NAS_DB" "SELECT COUNT(*) || ' tables' FROM sqlite_master WHERE type='table';"
fi
^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos
^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
screenpipe"
Close Tab
nano
Close Tab
✳ Review screenpipe usage and Boosteroid integration (node)
Close Tab
⌥⌘1
nano...
|
NULL
|
|
40570
|
852
|
10
|
2026-04-16T16:28:29.164107+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-16/1776 /Users/lukas/.screenpipe/data/data/2026-04-16/1776356909164_m1.jpg...
|
iTerm2
|
nano
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
idx_elements_source_role_text|elements|CREATE INDE idx_elements_source_role_text|elements|CREATE INDEX idx_elements_source_role_text
ON elements(source, role, frame_id)
WHERE text IS NOT NULL
idx_elements_frame_source_role|elements|CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL
idx_frames_timestamp|frames|CREATE INDEX idx_frames_timestamp ON frames(timestamp)
idx_frames_video_chunk_id|frames|CREATE INDEX idx_frames_video_chunk_id ON frames(video_chunk_id)
idx_frames_timestamp_device|frames|CREATE INDEX idx_frames_timestamp_device
ON frames(timestamp, device_name)
idx_frames_snapshot_path|frames|CREATE INDEX idx_frames_snapshot_path
ON frames(snapshot_path) WHERE snapshot_path IS NOT NULL
idx_frames_cloud_blob_id|frames|CREATE INDEX idx_frames_cloud_blob_id
ON frames(cloud_blob_id) WHERE cloud_blob_id IS NULL AND snapshot_path IS NOT NULL
idx_frames_sync_id|frames|CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL
idx_frames_elements_ref_frame_id|frames|CREATE INDEX idx_frames_elements_ref_frame_id
ON frames(elements_ref_frame_id)
WHERE elements_ref_frame_id IS NOT NULL
idx_meetings_start|meetings|CREATE INDEX idx_meetings_start ON meetings(meeting_start)
idx_meetings_end|meetings|CREATE INDEX idx_meetings_end ON meetings(meeting_end)
idx_memories_created_at|memories|CREATE INDEX idx_memories_created_at ON memories(created_at)
idx_memories_importance|memories|CREATE INDEX idx_memories_importance ON memories(importance DESC)
idx_memories_source|memories|CREATE INDEX idx_memories_source ON memories(source)
idx_memories_frame_id|memories|CREATE INDEX idx_memories_frame_id ON memories(frame_id)
idx_ocr_text_frame_id|ocr_text|CREATE INDEX idx_ocr_text_frame_id ON ocr_text(frame_id)
idx_ocr_text_frame_app_window|ocr_text|CREATE INDEX idx_ocr_text_frame_app_window ON ocr_text(frame_id, app_name, window_name)
idx_ocr_text_length|ocr_text|CREATE INDEX idx_ocr_text_length ON ocr_text (text_length)
idx_ocr_text_sync_id|ocr_text|CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL
idx_pipe_exec_name_status|pipe_executions|CREATE INDEX idx_pipe_exec_name_status ON pipe_executions(pipe_name, status)
idx_pipe_exec_running|pipe_executions|CREATE INDEX idx_pipe_exec_running ON pipe_executions(status) WHERE status = 'running'
idx_pipe_exec_name_time|pipe_executions|CREATE INDEX idx_pipe_exec_name_time ON pipe_executions(pipe_name, id DESC)
idx_ui_events_timestamp|ui_events|CREATE INDEX idx_ui_events_timestamp ON ui_events(timestamp)
idx_ui_events_event_type|ui_events|CREATE INDEX idx_ui_events_event_type ON ui_events(event_type)
idx_ui_events_app_name|ui_events|CREATE INDEX idx_ui_events_app_name ON ui_events(app_name)
idx_ui_events_session_id|ui_events|CREATE INDEX idx_ui_events_session_id ON ui_events(session_id)
idx_ui_events_frame_id|ui_events|CREATE INDEX idx_ui_events_frame_id ON ui_events(frame_id)
idx_ui_events_sync_id|ui_events|CREATE INDEX idx_ui_events_sync_id ON ui_events(sync_id)
idx_ui_events_synced_at|ui_events|CREATE INDEX idx_ui_events_synced_at ON ui_events(synced_at)
idx_ui_events_unsynced|ui_events|CREATE INDEX idx_ui_events_unsynced ON ui_events(synced_at) WHERE synced_at IS NULL
idx_video_chunks_device_name|video_chunks|CREATE INDEX idx_video_chunks_device_name ON video_chunks(device_name)
idx_video_chunks_device_name_id|video_chunks|CREATE INDEX idx_video_chunks_device_name_id ON video_chunks(device_name, id DESC)
idx_video_chunks_cloud_blob_id|video_chunks|CREATE INDEX idx_video_chunks_cloud_blob_id
ON video_chunks(cloud_blob_id) WHERE cloud_blob_id IS NULL
idx_vision_tags_vision_id|vision_tags|CREATE INDEX idx_vision_tags_vision_id ON vision_tags(vision_id)
idx_vision_tags_tag_id|vision_tags|CREATE INDEX idx_vision_tags_tag_id ON vision_tags(tag_id)
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT
'elements_fts' as name, COUNT(*) as rows FROM elements_fts
UNION ALL SELECT 'frames_fts', COUNT(*) FROM frames_fts
UNION ALL SELECT 'ui_events_fts', COUNT(*) FROM ui_events_fts
UNION ALL SELECT 'audio_transcriptions_fts', COUNT(*) FROM audio_transcriptions_fts;"
elements_fts|2595462
frames_fts|40394
ui_events_fts|51394
audio_transcriptions_fts|3
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT name, SUM(payload) as bytes
FROM dbstat
WHERE name IN ('elements_fts_data','frames_fts_data','ui_events_fts_data')
GROUP BY name;"
elements_fts_data|49417125
frames_fts_data|46211048
ui_events_fts_data|1661147
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT name, SUM(payload) as bytes
FROM dbstat
WHERE name IN ('frames', 'ui_events', 'elements', 'elements_fts_data','frames_fts_data','ui_events_fts_data')
GROUP BY name;"
elements|334884969
elements_fts_data|49472096
frames|689381789
frames_fts_data|46270876
ui_events|8354906
ui_events_fts_data|1663427
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT sql FROM sqlite_master WHERE type='table' AND name IN ('elements_fts','frames_fts','ui_events_fts','memories_fts') ORDER BY name;"
CREATE VIRTUAL TABLE elements_fts USING fts5(
text,
role,
frame_id UNINDEXED,
content='elements',
content_rowid='id',
tokenize='unicode61'
)
CREATE VIRTUAL TABLE frames_fts USING fts5(
full_text,
app_name,
window_name,
browser_url,
UW PICO 5.09 New Buffer
[ Read 1 line ]
^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos
^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell
id UNINDEXED,
tokenize='unicode61'
UW PICO 5.09 New Buffer
[ Read 1 line ]
^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos
^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell
)
UW PICO 5.09 New Buffer
[ Read 25 lines ]
^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos
^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell
CREATE VIRTUAL TABLE memories_fts USING fts5(
content,
tags,
content='memories',
content_rowid='id',
tokenize='unicode61'
)
CREATE VIRTUAL TABLE ui_events_fts USING fts5(
text_content,
app_name,
window_title,
element_name,
content='ui_events',
content_rowid='id',
tokenize='unicode61'
)
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ls
config.json db.sqlite-shm screenpipe.2026-04-09.0.log screenpipe.2026-04-13.0.log screenpipe.2026-04-16.0.log
data db.sqlite-wal screenpipe.2026-04-11.0.log screenpipe.2026-04-14.0.log
db.sqlite pipes screenpipe.2026-04-12.0.log screenpipe.2026-04-15.0.log
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ touch screenpipe_sync.sh
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ll
total 5632584
drwxr-xr-x 17 lukas staff 544 16 Apr 19:19 .
UW PICO 5.09 New Buffer
[ Read 25 lines ]
^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos
^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell
UW PICO 5.09 File: screenpipe_sync.sh
# Check NAS mount
if [ ! -d "/Volumes/Test/screenpipe" ]; then
echo "ERROR: NAS not mounted"
else
echo "OK: NAS mounted"
fi
# Check source DB
DB_SRC="$HOME/.screenpipe/db.sqlite"
if [ ! -f "$DB_SRC" ]; then
echo "ERROR: Source DB not found"
else
echo "OK: Source DB exists"
du -sh "$DB_SRC"
fi
# Check NAS DB (may not exist yet on first run - that's fine)
NAS_DB="/Volumes/Test/screenpipe/archive.db"
if [ ! -f "$NAS_DB" ]; then
echo "INFO: archive.db does not exist yet - will be created on first sync"
else
echo "OK: archive.db exists"
du -sh "$NAS_DB"
sqlite3 "$NAS_DB" "SELECT COUNT(*) || ' tables' FROM sqlite_master WHERE type='table';"
fi
^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos
^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
screenpipe"
Close Tab
nano
Close Tab
✳ Review screenpipe usage and Boosteroid integration (node)
Close Tab
⌥⌘1
nano...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"idx_elements_source_role_text|elements|CREATE INDEX idx_elements_source_role_text\n ON elements(source, role, frame_id)\n WHERE text IS NOT NULL\nidx_elements_frame_source_role|elements|CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL\nidx_frames_timestamp|frames|CREATE INDEX idx_frames_timestamp ON frames(timestamp)\nidx_frames_video_chunk_id|frames|CREATE INDEX idx_frames_video_chunk_id ON frames(video_chunk_id)\nidx_frames_timestamp_device|frames|CREATE INDEX idx_frames_timestamp_device\n ON frames(timestamp, device_name)\nidx_frames_snapshot_path|frames|CREATE INDEX idx_frames_snapshot_path\n ON frames(snapshot_path) WHERE snapshot_path IS NOT NULL\nidx_frames_cloud_blob_id|frames|CREATE INDEX idx_frames_cloud_blob_id\n ON frames(cloud_blob_id) WHERE cloud_blob_id IS NULL AND snapshot_path IS NOT NULL\nidx_frames_sync_id|frames|CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL\nidx_frames_elements_ref_frame_id|frames|CREATE INDEX idx_frames_elements_ref_frame_id\n ON frames(elements_ref_frame_id)\n WHERE elements_ref_frame_id IS NOT NULL\nidx_meetings_start|meetings|CREATE INDEX idx_meetings_start ON meetings(meeting_start)\nidx_meetings_end|meetings|CREATE INDEX idx_meetings_end ON meetings(meeting_end)\nidx_memories_created_at|memories|CREATE INDEX idx_memories_created_at ON memories(created_at)\nidx_memories_importance|memories|CREATE INDEX idx_memories_importance ON memories(importance DESC)\nidx_memories_source|memories|CREATE INDEX idx_memories_source ON memories(source)\nidx_memories_frame_id|memories|CREATE INDEX idx_memories_frame_id ON memories(frame_id)\nidx_ocr_text_frame_id|ocr_text|CREATE INDEX idx_ocr_text_frame_id ON ocr_text(frame_id)\nidx_ocr_text_frame_app_window|ocr_text|CREATE INDEX idx_ocr_text_frame_app_window ON ocr_text(frame_id, app_name, window_name)\nidx_ocr_text_length|ocr_text|CREATE INDEX idx_ocr_text_length ON ocr_text (text_length)\nidx_ocr_text_sync_id|ocr_text|CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL\nidx_pipe_exec_name_status|pipe_executions|CREATE INDEX idx_pipe_exec_name_status ON pipe_executions(pipe_name, status)\nidx_pipe_exec_running|pipe_executions|CREATE INDEX idx_pipe_exec_running ON pipe_executions(status) WHERE status = 'running'\nidx_pipe_exec_name_time|pipe_executions|CREATE INDEX idx_pipe_exec_name_time ON pipe_executions(pipe_name, id DESC)\nidx_ui_events_timestamp|ui_events|CREATE INDEX idx_ui_events_timestamp ON ui_events(timestamp)\nidx_ui_events_event_type|ui_events|CREATE INDEX idx_ui_events_event_type ON ui_events(event_type)\nidx_ui_events_app_name|ui_events|CREATE INDEX idx_ui_events_app_name ON ui_events(app_name)\nidx_ui_events_session_id|ui_events|CREATE INDEX idx_ui_events_session_id ON ui_events(session_id)\nidx_ui_events_frame_id|ui_events|CREATE INDEX idx_ui_events_frame_id ON ui_events(frame_id)\nidx_ui_events_sync_id|ui_events|CREATE INDEX idx_ui_events_sync_id ON ui_events(sync_id)\nidx_ui_events_synced_at|ui_events|CREATE INDEX idx_ui_events_synced_at ON ui_events(synced_at)\nidx_ui_events_unsynced|ui_events|CREATE INDEX idx_ui_events_unsynced ON ui_events(synced_at) WHERE synced_at IS NULL\nidx_video_chunks_device_name|video_chunks|CREATE INDEX idx_video_chunks_device_name ON video_chunks(device_name)\nidx_video_chunks_device_name_id|video_chunks|CREATE INDEX idx_video_chunks_device_name_id ON video_chunks(device_name, id DESC)\nidx_video_chunks_cloud_blob_id|video_chunks|CREATE INDEX idx_video_chunks_cloud_blob_id\n ON video_chunks(cloud_blob_id) WHERE cloud_blob_id IS NULL\nidx_vision_tags_vision_id|vision_tags|CREATE INDEX idx_vision_tags_vision_id ON vision_tags(vision_id)\nidx_vision_tags_tag_id|vision_tags|CREATE INDEX idx_vision_tags_tag_id ON vision_tags(tag_id)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT\n 'elements_fts' as name, COUNT(*) as rows FROM elements_fts\nUNION ALL SELECT 'frames_fts', COUNT(*) FROM frames_fts\nUNION ALL SELECT 'ui_events_fts', COUNT(*) FROM ui_events_fts\nUNION ALL SELECT 'audio_transcriptions_fts', COUNT(*) FROM audio_transcriptions_fts;\"\nelements_fts|2595462\nframes_fts|40394\nui_events_fts|51394\naudio_transcriptions_fts|3\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT name, SUM(payload) as bytes\nFROM dbstat\nWHERE name IN ('elements_fts_data','frames_fts_data','ui_events_fts_data')\nGROUP BY name;\"\nelements_fts_data|49417125\nframes_fts_data|46211048\nui_events_fts_data|1661147\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT name, SUM(payload) as bytes\nFROM dbstat\nWHERE name IN ('frames', 'ui_events', 'elements', 'elements_fts_data','frames_fts_data','ui_events_fts_data')\nGROUP BY name;\"\nelements|334884969\nelements_fts_data|49472096\nframes|689381789\nframes_fts_data|46270876\nui_events|8354906\nui_events_fts_data|1663427\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"SELECT sql FROM sqlite_master WHERE type='table' AND name IN ('elements_fts','frames_fts','ui_events_fts','memories_fts') ORDER BY name;\"\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)\nCREATE VIRTUAL TABLE frames_fts USING fts5(\n full_text,\n app_name,\n window_name,\n browser_url,\n UW PICO 5.09 New Buffer \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n [ Read 1 line ] \n^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos \n^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell \n id UNINDEXED,\n tokenize='unicode61'\n UW PICO 5.09 New Buffer \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n [ Read 1 line ] \n^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos \n^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell \n)\n UW PICO 5.09 New Buffer \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n [ Read 25 lines ] \n^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos \n^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell \nCREATE VIRTUAL TABLE memories_fts USING fts5(\n content,\n tags,\n content='memories',\n content_rowid='id',\n tokenize='unicode61'\n)\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)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ls\nconfig.json\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tdb.sqlite-shm\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-09.0.log\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-13.0.log\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-16.0.log\ndata\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tdb.sqlite-wal\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-11.0.log\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-14.0.log\ndb.sqlite\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tpipes\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-12.0.log\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-15.0.log\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ touch screenpipe_sync.sh\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ll\ntotal 5632584\ndrwxr-xr-x 17 lukas staff 544 16 Apr 19:19 .\n UW PICO 5.09 New Buffer \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n [ Read 25 lines ] \n^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos \n^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell \n UW PICO 5.09 File: screenpipe_sync.sh \n\n# Check NAS mount\nif [ ! -d \"/Volumes/Test/screenpipe\" ]; then\n\u0000\u0000echo \"ERROR: NAS not mounted\"\nelse\n\u0000\u0000echo \"OK: NAS mounted\"\nfi\n\n# Check source DB\nDB_SRC=\"$HOME/.screenpipe/db.sqlite\"\nif [ ! -f \"$DB_SRC\" ]; then\n\u0000\u0000echo \"ERROR: Source DB not found\"\nelse\n\u0000\u0000echo \"OK: Source DB exists\"\n\u0000\u0000du -sh \"$DB_SRC\"\nfi\n\n# Check NAS DB (may not exist yet on first run - that's fine)\nNAS_DB=\"/Volumes/Test/screenpipe/archive.db\"\nif [ ! -f \"$NAS_DB\" ]; then\n\u0000\u0000echo \"INFO: archive.db does not exist yet - will be created on first sync\"\nelse\n\u0000\u0000echo \"OK: archive.db exists\"\n\u0000\u0000du -sh \"$NAS_DB\"\n\u0000\u0000sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) || ' tables' FROM sqlite_master WHERE type='table';\"\nfi\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos \n^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell","depth":4,"value":"idx_elements_source_role_text|elements|CREATE INDEX idx_elements_source_role_text\n ON elements(source, role, frame_id)\n WHERE text IS NOT NULL\nidx_elements_frame_source_role|elements|CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL\nidx_frames_timestamp|frames|CREATE INDEX idx_frames_timestamp ON frames(timestamp)\nidx_frames_video_chunk_id|frames|CREATE INDEX idx_frames_video_chunk_id ON frames(video_chunk_id)\nidx_frames_timestamp_device|frames|CREATE INDEX idx_frames_timestamp_device\n ON frames(timestamp, device_name)\nidx_frames_snapshot_path|frames|CREATE INDEX idx_frames_snapshot_path\n ON frames(snapshot_path) WHERE snapshot_path IS NOT NULL\nidx_frames_cloud_blob_id|frames|CREATE INDEX idx_frames_cloud_blob_id\n ON frames(cloud_blob_id) WHERE cloud_blob_id IS NULL AND snapshot_path IS NOT NULL\nidx_frames_sync_id|frames|CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL\nidx_frames_elements_ref_frame_id|frames|CREATE INDEX idx_frames_elements_ref_frame_id\n ON frames(elements_ref_frame_id)\n WHERE elements_ref_frame_id IS NOT NULL\nidx_meetings_start|meetings|CREATE INDEX idx_meetings_start ON meetings(meeting_start)\nidx_meetings_end|meetings|CREATE INDEX idx_meetings_end ON meetings(meeting_end)\nidx_memories_created_at|memories|CREATE INDEX idx_memories_created_at ON memories(created_at)\nidx_memories_importance|memories|CREATE INDEX idx_memories_importance ON memories(importance DESC)\nidx_memories_source|memories|CREATE INDEX idx_memories_source ON memories(source)\nidx_memories_frame_id|memories|CREATE INDEX idx_memories_frame_id ON memories(frame_id)\nidx_ocr_text_frame_id|ocr_text|CREATE INDEX idx_ocr_text_frame_id ON ocr_text(frame_id)\nidx_ocr_text_frame_app_window|ocr_text|CREATE INDEX idx_ocr_text_frame_app_window ON ocr_text(frame_id, app_name, window_name)\nidx_ocr_text_length|ocr_text|CREATE INDEX idx_ocr_text_length ON ocr_text (text_length)\nidx_ocr_text_sync_id|ocr_text|CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL\nidx_pipe_exec_name_status|pipe_executions|CREATE INDEX idx_pipe_exec_name_status ON pipe_executions(pipe_name, status)\nidx_pipe_exec_running|pipe_executions|CREATE INDEX idx_pipe_exec_running ON pipe_executions(status) WHERE status = 'running'\nidx_pipe_exec_name_time|pipe_executions|CREATE INDEX idx_pipe_exec_name_time ON pipe_executions(pipe_name, id DESC)\nidx_ui_events_timestamp|ui_events|CREATE INDEX idx_ui_events_timestamp ON ui_events(timestamp)\nidx_ui_events_event_type|ui_events|CREATE INDEX idx_ui_events_event_type ON ui_events(event_type)\nidx_ui_events_app_name|ui_events|CREATE INDEX idx_ui_events_app_name ON ui_events(app_name)\nidx_ui_events_session_id|ui_events|CREATE INDEX idx_ui_events_session_id ON ui_events(session_id)\nidx_ui_events_frame_id|ui_events|CREATE INDEX idx_ui_events_frame_id ON ui_events(frame_id)\nidx_ui_events_sync_id|ui_events|CREATE INDEX idx_ui_events_sync_id ON ui_events(sync_id)\nidx_ui_events_synced_at|ui_events|CREATE INDEX idx_ui_events_synced_at ON ui_events(synced_at)\nidx_ui_events_unsynced|ui_events|CREATE INDEX idx_ui_events_unsynced ON ui_events(synced_at) WHERE synced_at IS NULL\nidx_video_chunks_device_name|video_chunks|CREATE INDEX idx_video_chunks_device_name ON video_chunks(device_name)\nidx_video_chunks_device_name_id|video_chunks|CREATE INDEX idx_video_chunks_device_name_id ON video_chunks(device_name, id DESC)\nidx_video_chunks_cloud_blob_id|video_chunks|CREATE INDEX idx_video_chunks_cloud_blob_id\n ON video_chunks(cloud_blob_id) WHERE cloud_blob_id IS NULL\nidx_vision_tags_vision_id|vision_tags|CREATE INDEX idx_vision_tags_vision_id ON vision_tags(vision_id)\nidx_vision_tags_tag_id|vision_tags|CREATE INDEX idx_vision_tags_tag_id ON vision_tags(tag_id)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT\n 'elements_fts' as name, COUNT(*) as rows FROM elements_fts\nUNION ALL SELECT 'frames_fts', COUNT(*) FROM frames_fts\nUNION ALL SELECT 'ui_events_fts', COUNT(*) FROM ui_events_fts\nUNION ALL SELECT 'audio_transcriptions_fts', COUNT(*) FROM audio_transcriptions_fts;\"\nelements_fts|2595462\nframes_fts|40394\nui_events_fts|51394\naudio_transcriptions_fts|3\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT name, SUM(payload) as bytes\nFROM dbstat\nWHERE name IN ('elements_fts_data','frames_fts_data','ui_events_fts_data')\nGROUP BY name;\"\nelements_fts_data|49417125\nframes_fts_data|46211048\nui_events_fts_data|1661147\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT name, SUM(payload) as bytes\nFROM dbstat\nWHERE name IN ('frames', 'ui_events', 'elements', 'elements_fts_data','frames_fts_data','ui_events_fts_data')\nGROUP BY name;\"\nelements|334884969\nelements_fts_data|49472096\nframes|689381789\nframes_fts_data|46270876\nui_events|8354906\nui_events_fts_data|1663427\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"SELECT sql FROM sqlite_master WHERE type='table' AND name IN ('elements_fts','frames_fts','ui_events_fts','memories_fts') ORDER BY name;\"\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)\nCREATE VIRTUAL TABLE frames_fts USING fts5(\n full_text,\n app_name,\n window_name,\n browser_url,\n UW PICO 5.09 New Buffer \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n [ Read 1 line ] \n^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos \n^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell \n id UNINDEXED,\n tokenize='unicode61'\n UW PICO 5.09 New Buffer \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n [ Read 1 line ] \n^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos \n^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell \n)\n UW PICO 5.09 New Buffer \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n [ Read 25 lines ] \n^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos \n^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell \nCREATE VIRTUAL TABLE memories_fts USING fts5(\n content,\n tags,\n content='memories',\n content_rowid='id',\n tokenize='unicode61'\n)\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)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ls\nconfig.json\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tdb.sqlite-shm\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-09.0.log\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-13.0.log\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-16.0.log\ndata\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tdb.sqlite-wal\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-11.0.log\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-14.0.log\ndb.sqlite\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tpipes\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-12.0.log\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-15.0.log\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ touch screenpipe_sync.sh\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ll\ntotal 5632584\ndrwxr-xr-x 17 lukas staff 544 16 Apr 19:19 .\n UW PICO 5.09 New Buffer \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n [ Read 25 lines ] \n^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos \n^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell \n UW PICO 5.09 File: screenpipe_sync.sh \n\n# Check NAS mount\nif [ ! -d \"/Volumes/Test/screenpipe\" ]; then\n\u0000\u0000echo \"ERROR: NAS not mounted\"\nelse\n\u0000\u0000echo \"OK: NAS mounted\"\nfi\n\n# Check source DB\nDB_SRC=\"$HOME/.screenpipe/db.sqlite\"\nif [ ! -f \"$DB_SRC\" ]; then\n\u0000\u0000echo \"ERROR: Source DB not found\"\nelse\n\u0000\u0000echo \"OK: Source DB exists\"\n\u0000\u0000du -sh \"$DB_SRC\"\nfi\n\n# Check NAS DB (may not exist yet on first run - that's fine)\nNAS_DB=\"/Volumes/Test/screenpipe/archive.db\"\nif [ ! -f \"$NAS_DB\" ]; then\n\u0000\u0000echo \"INFO: archive.db does not exist yet - will be created on first sync\"\nelse\n\u0000\u0000echo \"OK: archive.db exists\"\n\u0000\u0000du -sh \"$NAS_DB\"\n\u0000\u0000sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) || ' tables' FROM sqlite_master WHERE type='table';\"\nfi\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos \n^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.16388889,"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.16388889,"top":0.05888889,"width":0.16388889,"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.16805555,"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.32777777,"top":0.05888889,"width":0.16388889,"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.33194444,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.49166667,"top":0.05888889,"width":0.16388889,"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.49583334,"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":"nano","depth":2,"bounds":{"left":0.65555555,"top":0.05888889,"width":0.16388889,"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.6597222,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"✳ Review screenpipe usage and Boosteroid integration (node)","depth":2,"bounds":{"left":0.8194444,"top":0.05888889,"width":0.16388889,"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.82361114,"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":"nano","depth":1,"bounds":{"left":0.4875,"top":0.033333335,"width":0.025,"height":0.017777778},"role_description":"text"}]...
|
8021106716519421575
|
-3429880746629370976
|
visual_change
|
accessibility
|
NULL
|
idx_elements_source_role_text|elements|CREATE INDE idx_elements_source_role_text|elements|CREATE INDEX idx_elements_source_role_text
ON elements(source, role, frame_id)
WHERE text IS NOT NULL
idx_elements_frame_source_role|elements|CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL
idx_frames_timestamp|frames|CREATE INDEX idx_frames_timestamp ON frames(timestamp)
idx_frames_video_chunk_id|frames|CREATE INDEX idx_frames_video_chunk_id ON frames(video_chunk_id)
idx_frames_timestamp_device|frames|CREATE INDEX idx_frames_timestamp_device
ON frames(timestamp, device_name)
idx_frames_snapshot_path|frames|CREATE INDEX idx_frames_snapshot_path
ON frames(snapshot_path) WHERE snapshot_path IS NOT NULL
idx_frames_cloud_blob_id|frames|CREATE INDEX idx_frames_cloud_blob_id
ON frames(cloud_blob_id) WHERE cloud_blob_id IS NULL AND snapshot_path IS NOT NULL
idx_frames_sync_id|frames|CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL
idx_frames_elements_ref_frame_id|frames|CREATE INDEX idx_frames_elements_ref_frame_id
ON frames(elements_ref_frame_id)
WHERE elements_ref_frame_id IS NOT NULL
idx_meetings_start|meetings|CREATE INDEX idx_meetings_start ON meetings(meeting_start)
idx_meetings_end|meetings|CREATE INDEX idx_meetings_end ON meetings(meeting_end)
idx_memories_created_at|memories|CREATE INDEX idx_memories_created_at ON memories(created_at)
idx_memories_importance|memories|CREATE INDEX idx_memories_importance ON memories(importance DESC)
idx_memories_source|memories|CREATE INDEX idx_memories_source ON memories(source)
idx_memories_frame_id|memories|CREATE INDEX idx_memories_frame_id ON memories(frame_id)
idx_ocr_text_frame_id|ocr_text|CREATE INDEX idx_ocr_text_frame_id ON ocr_text(frame_id)
idx_ocr_text_frame_app_window|ocr_text|CREATE INDEX idx_ocr_text_frame_app_window ON ocr_text(frame_id, app_name, window_name)
idx_ocr_text_length|ocr_text|CREATE INDEX idx_ocr_text_length ON ocr_text (text_length)
idx_ocr_text_sync_id|ocr_text|CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL
idx_pipe_exec_name_status|pipe_executions|CREATE INDEX idx_pipe_exec_name_status ON pipe_executions(pipe_name, status)
idx_pipe_exec_running|pipe_executions|CREATE INDEX idx_pipe_exec_running ON pipe_executions(status) WHERE status = 'running'
idx_pipe_exec_name_time|pipe_executions|CREATE INDEX idx_pipe_exec_name_time ON pipe_executions(pipe_name, id DESC)
idx_ui_events_timestamp|ui_events|CREATE INDEX idx_ui_events_timestamp ON ui_events(timestamp)
idx_ui_events_event_type|ui_events|CREATE INDEX idx_ui_events_event_type ON ui_events(event_type)
idx_ui_events_app_name|ui_events|CREATE INDEX idx_ui_events_app_name ON ui_events(app_name)
idx_ui_events_session_id|ui_events|CREATE INDEX idx_ui_events_session_id ON ui_events(session_id)
idx_ui_events_frame_id|ui_events|CREATE INDEX idx_ui_events_frame_id ON ui_events(frame_id)
idx_ui_events_sync_id|ui_events|CREATE INDEX idx_ui_events_sync_id ON ui_events(sync_id)
idx_ui_events_synced_at|ui_events|CREATE INDEX idx_ui_events_synced_at ON ui_events(synced_at)
idx_ui_events_unsynced|ui_events|CREATE INDEX idx_ui_events_unsynced ON ui_events(synced_at) WHERE synced_at IS NULL
idx_video_chunks_device_name|video_chunks|CREATE INDEX idx_video_chunks_device_name ON video_chunks(device_name)
idx_video_chunks_device_name_id|video_chunks|CREATE INDEX idx_video_chunks_device_name_id ON video_chunks(device_name, id DESC)
idx_video_chunks_cloud_blob_id|video_chunks|CREATE INDEX idx_video_chunks_cloud_blob_id
ON video_chunks(cloud_blob_id) WHERE cloud_blob_id IS NULL
idx_vision_tags_vision_id|vision_tags|CREATE INDEX idx_vision_tags_vision_id ON vision_tags(vision_id)
idx_vision_tags_tag_id|vision_tags|CREATE INDEX idx_vision_tags_tag_id ON vision_tags(tag_id)
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT
'elements_fts' as name, COUNT(*) as rows FROM elements_fts
UNION ALL SELECT 'frames_fts', COUNT(*) FROM frames_fts
UNION ALL SELECT 'ui_events_fts', COUNT(*) FROM ui_events_fts
UNION ALL SELECT 'audio_transcriptions_fts', COUNT(*) FROM audio_transcriptions_fts;"
elements_fts|2595462
frames_fts|40394
ui_events_fts|51394
audio_transcriptions_fts|3
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT name, SUM(payload) as bytes
FROM dbstat
WHERE name IN ('elements_fts_data','frames_fts_data','ui_events_fts_data')
GROUP BY name;"
elements_fts_data|49417125
frames_fts_data|46211048
ui_events_fts_data|1661147
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT name, SUM(payload) as bytes
FROM dbstat
WHERE name IN ('frames', 'ui_events', 'elements', 'elements_fts_data','frames_fts_data','ui_events_fts_data')
GROUP BY name;"
elements|334884969
elements_fts_data|49472096
frames|689381789
frames_fts_data|46270876
ui_events|8354906
ui_events_fts_data|1663427
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT sql FROM sqlite_master WHERE type='table' AND name IN ('elements_fts','frames_fts','ui_events_fts','memories_fts') ORDER BY name;"
CREATE VIRTUAL TABLE elements_fts USING fts5(
text,
role,
frame_id UNINDEXED,
content='elements',
content_rowid='id',
tokenize='unicode61'
)
CREATE VIRTUAL TABLE frames_fts USING fts5(
full_text,
app_name,
window_name,
browser_url,
UW PICO 5.09 New Buffer
[ Read 1 line ]
^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos
^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell
id UNINDEXED,
tokenize='unicode61'
UW PICO 5.09 New Buffer
[ Read 1 line ]
^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos
^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell
)
UW PICO 5.09 New Buffer
[ Read 25 lines ]
^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos
^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell
CREATE VIRTUAL TABLE memories_fts USING fts5(
content,
tags,
content='memories',
content_rowid='id',
tokenize='unicode61'
)
CREATE VIRTUAL TABLE ui_events_fts USING fts5(
text_content,
app_name,
window_title,
element_name,
content='ui_events',
content_rowid='id',
tokenize='unicode61'
)
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ls
config.json db.sqlite-shm screenpipe.2026-04-09.0.log screenpipe.2026-04-13.0.log screenpipe.2026-04-16.0.log
data db.sqlite-wal screenpipe.2026-04-11.0.log screenpipe.2026-04-14.0.log
db.sqlite pipes screenpipe.2026-04-12.0.log screenpipe.2026-04-15.0.log
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ touch screenpipe_sync.sh
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ll
total 5632584
drwxr-xr-x 17 lukas staff 544 16 Apr 19:19 .
UW PICO 5.09 New Buffer
[ Read 25 lines ]
^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos
^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell
UW PICO 5.09 File: screenpipe_sync.sh
# Check NAS mount
if [ ! -d "/Volumes/Test/screenpipe" ]; then
echo "ERROR: NAS not mounted"
else
echo "OK: NAS mounted"
fi
# Check source DB
DB_SRC="$HOME/.screenpipe/db.sqlite"
if [ ! -f "$DB_SRC" ]; then
echo "ERROR: Source DB not found"
else
echo "OK: Source DB exists"
du -sh "$DB_SRC"
fi
# Check NAS DB (may not exist yet on first run - that's fine)
NAS_DB="/Volumes/Test/screenpipe/archive.db"
if [ ! -f "$NAS_DB" ]; then
echo "INFO: archive.db does not exist yet - will be created on first sync"
else
echo "OK: archive.db exists"
du -sh "$NAS_DB"
sqlite3 "$NAS_DB" "SELECT COUNT(*) || ' tables' FROM sqlite_master WHERE type='table';"
fi
^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos
^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
screenpipe"
Close Tab
nano
Close Tab
✳ Review screenpipe usage and Boosteroid integration (node)
Close Tab
⌥⌘1
nano...
|
40569
|
|
40531
|
850
|
6
|
2026-04-16T16:20:45.120027+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-16/1776 /Users/lukas/.screenpipe/data/data/2026-04-16/1776356445120_m1.jpg...
|
iTerm2
|
nano
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
idx_elements_source_role_text|elements|CREATE INDE idx_elements_source_role_text|elements|CREATE INDEX idx_elements_source_role_text
ON elements(source, role, frame_id)
WHERE text IS NOT NULL
idx_elements_frame_source_role|elements|CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL
idx_frames_timestamp|frames|CREATE INDEX idx_frames_timestamp ON frames(timestamp)
idx_frames_video_chunk_id|frames|CREATE INDEX idx_frames_video_chunk_id ON frames(video_chunk_id)
idx_frames_timestamp_device|frames|CREATE INDEX idx_frames_timestamp_device
ON frames(timestamp, device_name)
idx_frames_snapshot_path|frames|CREATE INDEX idx_frames_snapshot_path
ON frames(snapshot_path) WHERE snapshot_path IS NOT NULL
idx_frames_cloud_blob_id|frames|CREATE INDEX idx_frames_cloud_blob_id
ON frames(cloud_blob_id) WHERE cloud_blob_id IS NULL AND snapshot_path IS NOT NULL
idx_frames_sync_id|frames|CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL
idx_frames_elements_ref_frame_id|frames|CREATE INDEX idx_frames_elements_ref_frame_id
ON frames(elements_ref_frame_id)
WHERE elements_ref_frame_id IS NOT NULL
idx_meetings_start|meetings|CREATE INDEX idx_meetings_start ON meetings(meeting_start)
idx_meetings_end|meetings|CREATE INDEX idx_meetings_end ON meetings(meeting_end)
idx_memories_created_at|memories|CREATE INDEX idx_memories_created_at ON memories(created_at)
idx_memories_importance|memories|CREATE INDEX idx_memories_importance ON memories(importance DESC)
idx_memories_source|memories|CREATE INDEX idx_memories_source ON memories(source)
idx_memories_frame_id|memories|CREATE INDEX idx_memories_frame_id ON memories(frame_id)
idx_ocr_text_frame_id|ocr_text|CREATE INDEX idx_ocr_text_frame_id ON ocr_text(frame_id)
idx_ocr_text_frame_app_window|ocr_text|CREATE INDEX idx_ocr_text_frame_app_window ON ocr_text(frame_id, app_name, window_name)
idx_ocr_text_length|ocr_text|CREATE INDEX idx_ocr_text_length ON ocr_text (text_length)
idx_ocr_text_sync_id|ocr_text|CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL
idx_pipe_exec_name_status|pipe_executions|CREATE INDEX idx_pipe_exec_name_status ON pipe_executions(pipe_name, status)
idx_pipe_exec_running|pipe_executions|CREATE INDEX idx_pipe_exec_running ON pipe_executions(status) WHERE status = 'running'
idx_pipe_exec_name_time|pipe_executions|CREATE INDEX idx_pipe_exec_name_time ON pipe_executions(pipe_name, id DESC)
idx_ui_events_timestamp|ui_events|CREATE INDEX idx_ui_events_timestamp ON ui_events(timestamp)
idx_ui_events_event_type|ui_events|CREATE INDEX idx_ui_events_event_type ON ui_events(event_type)
idx_ui_events_app_name|ui_events|CREATE INDEX idx_ui_events_app_name ON ui_events(app_name)
idx_ui_events_session_id|ui_events|CREATE INDEX idx_ui_events_session_id ON ui_events(session_id)
idx_ui_events_frame_id|ui_events|CREATE INDEX idx_ui_events_frame_id ON ui_events(frame_id)
idx_ui_events_sync_id|ui_events|CREATE INDEX idx_ui_events_sync_id ON ui_events(sync_id)
idx_ui_events_synced_at|ui_events|CREATE INDEX idx_ui_events_synced_at ON ui_events(synced_at)
idx_ui_events_unsynced|ui_events|CREATE INDEX idx_ui_events_unsynced ON ui_events(synced_at) WHERE synced_at IS NULL
idx_video_chunks_device_name|video_chunks|CREATE INDEX idx_video_chunks_device_name ON video_chunks(device_name)
idx_video_chunks_device_name_id|video_chunks|CREATE INDEX idx_video_chunks_device_name_id ON video_chunks(device_name, id DESC)
idx_video_chunks_cloud_blob_id|video_chunks|CREATE INDEX idx_video_chunks_cloud_blob_id
ON video_chunks(cloud_blob_id) WHERE cloud_blob_id IS NULL
idx_vision_tags_vision_id|vision_tags|CREATE INDEX idx_vision_tags_vision_id ON vision_tags(vision_id)
idx_vision_tags_tag_id|vision_tags|CREATE INDEX idx_vision_tags_tag_id ON vision_tags(tag_id)
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT
'elements_fts' as name, COUNT(*) as rows FROM elements_fts
UNION ALL SELECT 'frames_fts', COUNT(*) FROM frames_fts
UNION ALL SELECT 'ui_events_fts', COUNT(*) FROM ui_events_fts
UNION ALL SELECT 'audio_transcriptions_fts', COUNT(*) FROM audio_transcriptions_fts;"
elements_fts|2595462
frames_fts|40394
ui_events_fts|51394
audio_transcriptions_fts|3
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT name, SUM(payload) as bytes
FROM dbstat
WHERE name IN ('elements_fts_data','frames_fts_data','ui_events_fts_data')
GROUP BY name;"
elements_fts_data|49417125
frames_fts_data|46211048
ui_events_fts_data|1661147
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT name, SUM(payload) as bytes
FROM dbstat
WHERE name IN ('frames', 'ui_events', 'elements', 'elements_fts_data','frames_fts_data','ui_events_fts_data')
GROUP BY name;"
elements|334884969
elements_fts_data|49472096
frames|689381789
frames_fts_data|46270876
ui_events|8354906
ui_events_fts_data|1663427
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT sql FROM sqlite_master WHERE type='table' AND name IN ('elements_fts','frames_fts','ui_events_fts','memories_fts') ORDER BY name;"
CREATE VIRTUAL TABLE elements_fts USING fts5(
text,
role,
frame_id UNINDEXED,
content='elements',
content_rowid='id',
tokenize='unicode61'
)
CREATE VIRTUAL TABLE frames_fts USING fts5(
full_text,
app_name,
window_name,
browser_url,
UW PICO 5.09 New Buffer
[ Read 1 line ]
^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos
^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell
id UNINDEXED,
tokenize='unicode61'
UW PICO 5.09 New Buffer
[ Read 1 line ]
^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos
^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell
UW PICO 5.09 File: screenpipe_sync.sh Modified
# Check NAS mount
if [ ! -d "/Volumes/Test/screenpipe" |